AcWing 844. 走迷宫
原题链接
简单
作者:
东条希尔薇
,
2024-10-27 19:22:16
,
所有人可见
,
阅读 1
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cstdlib>
//用bfs的原因:最短路,且权重为1,适合
//bfs比较固定,基本都是用队列实现
using namespace std;
int n,m;
const int N = 110;
int mm[N][N];
int d[N][N];//记录从起点走到每个点的距离(如果可以走通)
typedef pair<int, int> PII;//队列中记录每个点的位置
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};//利用向量来走迷宫,方便for的遍历
int bfs()
{
queue<PII>q;
q.push({0,0});
d[0][0]=0;
mm[0][0]=1;
while(!q.empty())
{
PII cur=q.front();
q.pop();
int x=cur.first;
int y=cur.second;
for(int i=0;i<4;i++)
{
if((x+dx[i]>=0&&x+dx[i]<n&&y+dy[i]>=0&&y+dy[i]<m)&&mm[x+dx[i]][y+dy[i]]==0)
{
q.push({x+dx[i],y+dy[i]});
mm[x+dx[i]][y+dy[i]]=1;
d[x+dx[i]][y+dy[i]]=d[x][y]+1;
}
}
}
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>>mm[i][j];
}
}
memset(d, -1, sizeof d);
cout<<bfs()<<endl;
return 0;
}