《挑战程序设计比赛》 P35 题目:迷宫的最短路径 广度搜索
2017-12-11 17:56
260 查看
深度搜素, 利用STL中的 Queue
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
10 10
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
#include <bits/stdc++.h> using namespace std; struct P{ int x; int y; int dis; P(int x,int y ,int dis){ this->x =x; this->y=y; this->dis=dis; } }; int N,M; char yard[100][100]; int dx[]={0, 0 , 1, -1 }; int dy[]={1 , -1 , 0, 0 }; int sx,sy,gx,gy; void bfs(){ queue<P> Q; Q.push( P(sx,sy,0) ); while( !Q.empty() ) { P p=Q.front(); Q.pop(); for(int i=0;i<4;i++){ int newx = p.x + dx[i]; int newy = p.y + dy[i]; if( newx == gx && newy == gy ) { cout << p.dis + 1; return; } if( newx>=0 && newx<N && newy>0 && newy<M && yard[newx][newy]=='.' ) { Q.push( P( newx, newy, p.dis+1 ) ); yard[newx][newy] = '#'; } } } } int main() { cin >> N >> M ; for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ char t; //这里调试了半个小时。 误输入了int cin >> t; if( t=='S') { sx=i; sy=j;} if( t=='G') { gx=i; gy=j;} yard[i][j] = t; } } bfs(); return 0; }
相关文章推荐
- 迷宫:广度优先搜索求最短路径
- 迷宫问题(广度优先搜索,输出最短路径)
- 广度优先搜索--迷宫最短路径--队列
- 广度优先搜索迷宫的最短路径走法!
- (广度优先搜索第一课)迷宫的最短路径 - BFS
- 迷宫最短路径的C++实现(队列:广度优先)
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- c语言描述之广度优先搜索——无权最短路径
- 迷宫最短路径(宽度搜索妙解)
- 迷宫最短路径的C++实现(队列:广度优先)
- 最短路径条数问题 - 广度优先搜索
- 搜索之广度搜索【迷宫搜索】(输出一条路径)
- 广度优先搜索迷宫路径算法的实现
- BFS-迷宫问题-用宽度(广度)优先搜索解决最优路径问题
- 题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
- 广度优先搜索之最短路径
- 【搜索-广搜】 迷宫的最短路径
- 宽度优先搜索——迷宫的最短路径
- 图论(三)------广度优先搜索与单源无权最短路径
- algo3-4-3.c 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)