迷宫的最短路径——BFS解法

给定一个大小为N*M的迷宫,迷宫由通道和墙壁组成,,每一步可以向左右上下四个方向走一步,请计算从出发点到终点最少需要多少步,若不能到达终点则输出‘NO’

n,m<=100

样例输入:

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
SW.W.....WW.
W.W.W.....W.
.W.WG.....W.
..W.......W.

样例输出:

12

 

使用bfs能够解出此题,创建一个二维数组盛放到各个位置的最短距离,最后得出结果

 

解题代码:

#include
#include
using namespace std;
typedef pair p;//表示位置 
int book[100][100],n,m,sx,sy;//book数组是用来记录当前位置是否已经到达,999999表示未到达,其他数字代表从出发点到此位置的最短步数 
char maze[100][100];
int bfs(int x,int y){
	queue

que; que.push(p(x,y)); while(que.size()){ p p1= que.front();que.pop(); if(maze[p1.first][p1.second] == 'G'){ return book[p1.first][p1.second]; } for(int i=-1;i<=1;i++){ for(int j=-1;j<=1;j++){ if(i==0&&j==0||i==1&&j==1||i==-1&&j==1||i==1&&j==-1||i==-1&&j==-1)continue; int i1=p1.first+i,j1=p1.second+j; if(i1>=0&&i1=0&&j1>n>>m; for(int i=0;i>maze[i][j]; if(maze[i][j]=='S'){ sx=i;sy=j; book[i][j]=0; } } } int res=bfs(sx,sy); if(res!=999999){ cout<

 

你可能感兴趣的:(____bfs,____最短路径)