利用宽度优先搜索解决迷宫最短路径问题

利用宽度优先搜索解决迷宫最短路径问题

题目:给定一个大小为N*M的迷宫,迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。求从起点到终点所需最小步数。

注意:本题假定从起点一定可以移动到终点。

限制条件

N,M<=100

(#   .   S    G 分别表示墙壁,通道,起点和终点)

#include
#include
using namespace std;

const int INF=100000000;

const int MAX_M=100,MAX_N=100 ;
typedef pairP;

char maze[MAX_N][MAX_M+1];//迷宫

int N,M;
int sx,sy;//起点坐标
int gx,gy;//终点坐标
int d[MAX_N][MAX_M];//到各个位置最短距离的数组

//4个方向移动的向量
int dx[4]= {1,0,-1,0},dy[4]= {0,1,0,-1};


//求从(sx,sy)到(gx,gy)的最短距离
//如果无法到达,则是INF

int bfs()
{
	queue

que; //把所有的位置都初始化为INF for(int i=0; i=0&&nx=0&&ny>N>>M; for(int i=0; i>maze[i][j]; if(maze[i][j]=='S') sx=i,sy=j; if(maze[i][j]=='G') gx=i,gy=j;//注意if 等条件语句中如果不适用大括号, }//那么必须中间是逗号,否则if语句的约束只到第一个分号处。 } solve(); return 0; } //输入 //10 10 //#S######.# //......#..# //.#.##.##.# //.#........ //##.##.#### //....#....# //.#######.# //....#..... //.####.###. //....#...G#

题目来自《挑战程序设计竞赛》

你可能感兴趣的:(C++,ACM,程序设计之路)