C++广度优先搜索算法之走出迷宫
来源:互联网 发布:深圳程序员工资2016 编辑:程序博客网 时间:2024/06/06 09:20
走出迷宫
- Description
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。- Input
- 第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。 - Output
- 输出从起点到出口最少需要走的步数。
Sample Input
3 3S#T.#....
- Sample Output
6
这是典型的迷宫求最短路径问题,类似的题还有仙岛求药、拯救行动、献给阿尔吉侬的花束……
代码如下:
#include<cstdio>int head=0,tail=1,nextx,nexty,n,m,beginx,beginy,endx,endy;int pre[100000],a[100000],b[100000];int x[4]={0,0,1,-1},y[4]={1,-1,0,0},total;bool mark[100][100],flag;char map[100][100];void find(int d){ if(pre[d]!=0)find(pre[d]); total++;}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; pre[1]=0; head=0;tail=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]!='#'){tail++;a[tail]=nextx; b[tail]=nexty;pre[tail]=head;mark[nextx][nexty]=1; if(a[tail]==endx&&b[tail]==endy){find(tail);printf("%d\n",total-1);flag=1;return ;}}}}}main(){scanf("%d%d",&n,&m);for(int i=0;i<n;i++){scanf("%s",map[i]);for(int j=0;j<m;j++){if(map[i][j]=='S'){beginx=i;beginy=j;}if(map[i][j]=='T'){endx=i;endy=j;}}}if(beginx==endx&&beginy==endy){printf("0\n");return 0;}bfs();if(!flag) printf("-1\n");}
阅读全文
0 0
- C++广度优先搜索算法之走出迷宫
- 迷宫之广度优先搜索
- C++广度优先搜索算法之迷宫问题
- C++广度优先搜索算法之走迷宫
- C语言广度优先搜索之迷宫(队列)
- 算法之广度优先搜索
- 迷宫问题-广度优先搜索
- 迷宫问题-广度优先搜索
- 广度优先搜索:迷宫问题
- 机试算法讲解: 第41题 广度优先搜索之迷宫问题
- 算法:队列与广度优先搜索(迷宫问题)
- 广度优先搜索迷宫路径算法的实现
- C/C++广度优先搜索模拟迷宫求解问题
- 迷宫最短路径 广度优先搜索—C
- 图算法之广度优先搜索
- 基本图算法之广度优先搜索
- C++广度优先搜索算法之仙岛求药
- 算法导论之广度优先搜索
- 1004 Anagrams by Stack
- JaveScript之关于时间的函数
- CNN文本分类
- 决策树
- Length of Last Word
- C++广度优先搜索算法之走出迷宫
- The server does not support version 3.0 of the J2EE Web module specification解决方案
- JavaScript(1)
- 树莓派3b no wireless interfaces found 的解决办法 360wifi和树莓派结合
- 解决java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- 知识图谱技术分享会----有关知识图谱构建的部分关键技术简介及思考
- 整除7,9,11的数的性质
- java语言---一维数组要点
- VR系列——Oculus Rift 开发者指南:四、高级渲染配置(二)