BFS 迷宫的最短路径

来源:互联网 发布:aloha什么软件 编辑:程序博客网 时间:2024/05/22 06:39

迷宫的最短路径


给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以 
向邻接的上下左右四个方位的通道移动,请求出从起点到终点所需的最小不熟。
此题假设一定能从起点到终点


限制条件:

N,M <=100

样例:


输入:

10 10

#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#


输出:
22




#include<iostream>#include<queue>#include<utility>using namespace std;int N,M; int sx,sy;//起点 int gx,gy;//终点 #define MAX_N 101#define INF 1000000char maze[MAX_N][MAX_N];//迷宫 typedef pair<int,int> p;int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};queue<p> q;int d[MAX_N][MAX_N];int bfs(){for(int i=0;i<N;i++){for(int j=0;j<M;j++){d[i][j]=INF;}}int nx,ny;q.push(p(sx,sy));d[sx][sy]=0;cout<<gx<<" "<<gy<<endl;cout<<sx<<" "<<sy<<endl;while(q.size()){p P=q.front();q.pop();if(P.first==gx&&P.second==gy){cout<<P.first<<" "<<P.second<<endl; break;}for(int i=0;i<4;i++){nx=P.first+dir[i][0];ny=P.second+dir[i][1];if(0<=nx&&nx<N&&0<=ny&&ny<M&&maze[nx][ny]!='#'&&d[nx][ny]==INF){q.push(p(nx,ny));d[nx][ny]=d[P.first][P.second]+1;} }}return d[gx][gy];}int main(){while(cin>>N>>M){for(int i=0;i<N;i++){for(int j=0;j<M;j++){cin>>maze[i][j];if(maze[i][j]=='S'){sx=i;sy=j;}if(maze[i][j]=='G'){gx=i;gy=j;}}}cout<<bfs()<<endl;}} 


0 0
原创粉丝点击