迷宫问题
来源:互联网 发布:牛仔外套品牌推荐知乎 编辑:程序博客网 时间:2024/05/01 23:38
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");
}
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题...
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 迷宫问题
- 怎样使UISearchBar背景透明
- c# web 用户控件的使用
- iphone上UISwitch控件用法
- JSON 解析 - java库org.json简介
- 使用倍增算法(Prefix Doubling)构造后缀数组
- 迷宫问题
- 关于多核的发展对网络游戏设计影响的一些思考
- MediaWiki 1.17.0 安装
- WIN32 数据类型 理解
- 跨平台网络库的设计
- 八皇后
- 异步弹出窗口的jq插件-asyncbox
- Square= =……拼正方形
- Guarding the Farm