AcWing 844. 走迷宫
原题链接
简单
作者:
哈基咪
,
2020-03-22 15:17:48
,
所有人可见
,
阅读 590
BFS 注意判重(一开始忘记判重了 然后内存就超了QwQ)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int , int > PP;
const int N=101;
int map[N][N],n,m;
int dis[N][N];//用来判重和记录最小值
int bfs(PP start, PP end)
{
memset(dis,-1,sizeof(dis));
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
queue<PP> q;
q.push(start);
dis[1][1]=0;
while(q.size())
{
PP t=q.front();
q.pop();//队头元素取出来之后就给他弹出去
for(int i=0;i<4;i++)
{
int x=t.first+dx[i],y=t.second+dy[i];
if(x<1||x>n||y<1||y>m) continue;
if(map[x][y]==1) continue;
if(dis[x][y]!=-1) continue;
dis[x][y]=dis[t.first][t.second]+1;
if(end==make_pair(x,y)) return dis[x][y];
PP m;m.first=x;m.second=y;
q.push({x,y});
}
}// return dis[n][m];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&map[i][j]);
PP start,end;
start.first=1;start.second=1;
end.first=n;end.second=m;
int res=bfs(start,end);
cout<<res<<endl;
return 0;
}