AcWing 844. 走迷宫
原题链接
简单
作者:
蒟蒻--变革
,
2021-02-15 21:36:08
,
所有人可见
,
阅读 243
#include <iostream>
#include <cstring>
using namespace std;
typedef pair<int, int> PII;
const int N = 110;
int n, m;
int g[N][N],d[N][N];
PII q[N * N];
//方向盘
int dx[4] = {-1,1,0,0},dy[4] = {0,0,1,-1};
void bfs()
{
//初始化各个点与原点距离
memset(d,-1,sizeof d);
d[0][0] = 0;
//初始化中心点
int hh = 0, tt = -1;
q[++tt] = {0,0};
//BFS
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)//外扩点无越界,可走且未走
{
q[++tt] ={x,y};//外扩点成为中心点,队尾存入后续中心点
d[x][y] = d[t.first][t.second] + 1;//根据中心点得有外扩点与原点距离
}
}
}
cout << d[n-1][m-1] << endl;
}
int main()
{
cin >> n >> m;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
cin >> g[i][j];
bfs();
}