C++广度优先搜索算法之走迷宫
2017-06-13 22:42
344 查看
走迷宫
题目描述
一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0表示)。你的任务是找一条从起点到终点的最短移动序列。用U、D、L、R分别表示往上、下、左、右移动到相邻单元格。不能走到障碍物上,也不能走出迷宫。起点和终点保证是空地,保证从起点到终点一定存在至少一条路径。
输入
第1行:2个整数n和m,分别表示行数和列数(n,m <=100)
接下来n行,每行m个0、1数字,描述迷宫
最后1行:4个整数x1, y1, x2, y2,分别表示起点和终点的行号和列号,行和列均从1开始编号
输出
第1行:一个字符串,表示起点到终点的移动序列。若有多个方案,任一个方案均可。
样例输入
5 5
0 0 0 1 0
1 0 1 1 1
1 1 1 0 0
0 1 0 0 0
1 1 1 0 0
2 5 5 3
样例输出
LLDLDDR
这道题是广度优先搜索算法的一道经典例题。
代码如下:
题目描述
一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0表示)。你的任务是找一条从起点到终点的最短移动序列。用U、D、L、R分别表示往上、下、左、右移动到相邻单元格。不能走到障碍物上,也不能走出迷宫。起点和终点保证是空地,保证从起点到终点一定存在至少一条路径。
输入
第1行:2个整数n和m,分别表示行数和列数(n,m <=100)
接下来n行,每行m个0、1数字,描述迷宫
最后1行:4个整数x1, y1, x2, y2,分别表示起点和终点的行号和列号,行和列均从1开始编号
输出
第1行:一个字符串,表示起点到终点的移动序列。若有多个方案,任一个方案均可。
样例输入
5 5
0 0 0 1 0
1 0 1 1 1
1 1 1 0 0
0 1 0 0 0
1 1 1 0 0
2 5 5 3
样例输出
LLDLDDR
这道题是广度优先搜索算法的一道经典例题。
代码如下:
#include<cstdio> #include<cstdlib> int head=0,tail=1,nextx,nexty,n,m,beginx,beginy,endx,endy; int pre[100000],a[100000],b[100000],map[200][200]; int x[4]={-1,1,0,0},y[4]={0,0,-1,1}; bool mark[200][200]; char way[100000],word[4]={'U','D','L','R'}; void find(int x) { if(pre[x]!=0) { find(pre[x]); printf("%c",way[x]); } } bool check(int x,int y) { if(x<=n&&y<=m&&x>0&&y>0) return 1; return 0; } void bfs() { a[1]=beginx; b[1]=beginy; mark[beginx][beginy]=1; while(head!=tail) { head++; for(int i=0;i<4;i++) { nextx=a[head]+x[i]; nexty=b[head]+y[i]; if(check(nextx,nexty)&&!mark[nextx][nexty]&&map[nextx][nexty]==1) { tail++; a[tail]=nextx; b[tail]=nexty; pre[tail]=head; way[tail]=word[i]; mark[nextx][nexty]=1; if(a[tail]==endx&&b[tail]==endy) { find(tail); printf("\n"); exit(0); } } } } } 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]); scanf("%d%d%d%d",&beginx,&beginy,&endx,&endy); bfs(); }
相关文章推荐
- C++广度优先搜索算法之迷宫问题
- C++广度优先搜索算法之走出迷宫
- C++广度优先搜索算法之献给阿尔吉侬的花束
- 广度优先搜索迷宫路径算法的实现
- C/C++广度优先搜索模拟迷宫求解问题
- C++广度优先搜索算法之Dungeon Master
- 机试算法讲解: 第41题 广度优先搜索之迷宫问题
- 【游戏编程】AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- c++ 使用广度优先算法走迷宫并标记路径
- C++广度优先搜索算法之鸣人与佐助
- 广度优先搜索-迷宫问题(算法基础 第8周)
- 图基本算法介绍:广度优先搜索、深度优先搜索、拓扑排序、强连通分支(算法篇)
- 广度优先搜索(BFS)算法
- 《算法导论》中广度优先搜索的实现 c++
- 广度优先搜索C++练习题HDU 1242 Rescue
- 【算法入门】广度/宽度优先搜索(BFS)
- C++ Boost graph 深度(广度)优先算法示例
- 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道
- HDU/HDOJ 1242 Rescue 典型的迷宫广度优先搜索题
- 广度优先搜索nodeHDU/HDOJ 1242 Rescue 典型的迷宫广度优先搜索题