AcWing 844. 走迷宫
原题链接
简单
作者:
minux
,
2020-04-25 22:35:55
,
所有人可见
,
阅读 485
#include <bits/stdc++.h>
using namespace std;
const int N=105;
const int M=105;
int G[N][M];
int n, m;
int dirs[4][2]={{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
int main(){
cin>>n>>m;
memset(G, 0x00, sizeof G);
for(int i=0; i<n; ++i)
for(int j=0; j<m; ++j)
cin>>G[i][j];
vector<vector<bool>> vis=vector<vector<bool>>(n, vector<bool>(m, false));
queue<pair<int, int>> q;
q.push({0*m+0, 0});
vis[0][0]=true;
while(!q.empty()){
int x=q.front().first/m;
int y=q.front().first%m;
int step = q.front().second;
q.pop();
for(auto &dir: dirs){
int nx=x+dir[0];
int ny=y+dir[1];
if(0<=nx && nx<n && 0<=ny && ny<m && !vis[nx][ny] && G[nx][ny]==0){
if(nx==n-1 && ny==m-1){
cout<<step+1<<endl;
return 0;
}
vis[nx][ny]=true;
q.push({nx*m+ny, step+1});
}
}
}
return 0;
}