题意:从左上角到达右下角的最少步数即最短路,0是不可以走的,1可以走,数据范围最大为100x100的地图
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int >PII;
int g[110][110];
int d[110][110];
int n,m;
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
int bfs()
{
memset(d,-1,sizeof(d));
d[0][0]=0;
queue<PII>q;
q.push({0,0});
while(q.size())
{
PII t=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int nx=t.first+dx[i];
int ny=t.second+dy[i];
if(nx>=0&&nx<n&&ny>=0&&ny<m&&d[nx][ny]==-1&&g[nx][ny]==0)
{
d[nx][ny]=d[t.first][t.second]+1;
q.push({nx,ny});
}
}
}
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;
return 0;
}