走迷宫
作者:
六便士
,
2022-03-14 21:34:27
,
所有人可见
,
阅读 147
//走迷宫
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef pair<int,int> PII;
const int N = 110;
int n,m;
int g[N][N]; //图
int d[N][N]; //距离
PII q[N*N]; //模拟队列
int bfs()
{
int hh = 0, tt = 0; //hh 队头 tt 队尾
q[0] = {0,0};
memset(d, -1, sizeof(d));
d[0][0] = 0;
int dx[4] = {-1,0,1,0}, dy[4] = {0,1,0,-1};
while(hh <= tt)
{
auto t = q[hh ++]; //取出队头元素
for(int i = 0; i < 4; i ++)
{
int x = t.first + dx[i], y = t.second + dy[i];
if(x >= 0 && x < n && y >= 0 && y < m && g[x][y] == 0 && d[x][y] == -1)
{
d[x][y] = d[t.first][t.second] + 1;
q[++ tt] = {x, y}; //入队
}
}
}
return d[n-1][m-1];
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i++)
for(int j = 0; j< m; j++)
cin >> g[i][j];
cout << bfs() << endl;
}