pz要从迷宫的(1,1)处去到遥远的(m,n)处,因为那里有好多plmm,ta不在乎路线是不是最佳的,只在乎是不是有路能够追寻到mm,现ta给你这张迷宫的地图, 向你咨询mm是否只是可远观而不可&*%$#@。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
int map[505][505];//迷宫布局;
int d[4][2]={{0,1},{0,-1},{1,0},{-1,0}};//走的步数;
int used[505][505];//是否被使用;
int n,m;//n x m的地图;
int ok=0;//是否有通路;
typedef struct{
int x,y;//地图坐标;
}M;
queue<M> q;//BFS的队列;
void BFS(int x,int y)/*开始位置;*/{
M t,tt,ttt;//完成BFS的三个队列;
t.x=x;t.y=y;//记录第一个,送入队列;
used[x][y]=1;//标记为已使用;
q.push(t);
int xx,yy;//下一步BFS的位置……下面使用
while(q.size()!=0)/*当队列不为空时*/{
tt=q.front();//取出队头;
if(tt.x==n && tt.y==m){//到达出口;
ok=1;//可以;
return;
}
q.pop();//否则清除,继续;
for(int i=0;i<4;i++){//开始找与tt相邻的坐标;
xx=tt.x+d[i][0];//横坐标;
yy=tt.y+d[i][1];//纵坐标;
if(map[xx][yy]==1 && !used[xx][yy]){//如果下个相邻位置为1,即可以通过,并且未被使用;
ttt.x=xx;ttt.y=y;
q.push(ttt);//送入队列;
used[xx][yy]=1;//标记为使用;
}
}
}
}
int main(){
scanf("%d%d",&n,&m);//输入n x m的迷宫;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
scanf("%d",&map[i][j]);
}
BFS(1,1);//从出口开始找;
if(ok==0)
puts("No way");
else
puts("Bingo");
}