首页 > 代码库 > 迷宫问题_BFS_挑战程序设计竞赛p34
迷宫问题_BFS_挑战程序设计竞赛p34
给定一个N*M的迷宫,求从起点到终点的最小步数。
N,M<100;
输入:
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
输出:
22
:在求最短路时使用宽度优先搜索。
1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 5 using namespace std; 6 7 const int INF=100000000; 8 9 typedef pair<int,int> P;10 11 char maze[200][200];12 int N,M;13 int sx,sy;14 int gx,gy;15 int d[200][200];16 int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};17 18 int bfs(){19 queue<P> que;20 for(int i=0;i<N;i++){21 for(int j=0;j<M;j++){22 d[i][j]=INF;23 }24 }25 que.push(P(sx,sy));26 d[sx][sy]=0;27 28 while(que.size()){29 P p=que.front();que.pop();30 if(p.first==gx&&p.second==gy) break;31 32 for(int i=0;i<4;i++){33 int nx=p.first+dx[i],ny=p.second+dy[i];34 if(nx>=0 && nx<N && ny>=0 &&ny<M && maze[nx][ny]!=‘#‘ && d[nx][ny]==INF){35 que.push(P(nx,ny));36 d[nx][ny]=d[p.first][p.second]+1;37 }38 }39 }40 return d[gx][gy];41 }42 43 void solve(){44 int res=bfs();45 printf("%d\n",res);46 }47 48 int main()49 {50 while(~scanf("%d %d",&N,&M)){51 getchar();52 for(int i=0;i<N;i++){53 for(int j=0;j<M;j++){54 scanf("%c",&maze[i][j]);55 if(maze[i][j]==‘S‘){56 sx=i;57 sy=j;58 }59 if(maze[i][j]==‘G‘){60 gx=i;61 gy=j;62 }63 }64 getchar();65 }66 solve();67 }68 return 0;69 }
迷宫问题_BFS_挑战程序设计竞赛p34
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。