最简单的BFS入门题目——迷宫的最短路径
2017-10-07 23:44
561 查看
迷宫的最短路径
给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。如果不能到达,输出“不能走到那里”。(N,M<=50,起点,终点分别用S,G表示)输入样例:N=5,M=5 #S### ..##. #.### ..### ..G##
输出:5
分析:这是一道BFS模版题,直接要求最短路,没有其他的约束条件
以下是代码
//简单BFS #include<cstdio> #include<iostream> #include<cstring> #include<queue> using namespace std; char maze[50][50]; bool vis[10][10]; int n,m; int sx,sy; int ex,ey; int dx[]={1,0,-1,0};//四个方向 int dy[]={0,1,0,-1}; struct node { int x,y,step; }; void bfs() { node p; p.x=sx;p.y=sy;p.step=0; queue<node>q; q.push(p); vis[sx][sy]=1; while(!q.empty()) { node tmp=q.front(); q.pop(); if(tmp.x==ex&&tmp.y==ey) {cout<<"最短路为"<<tmp.step<<endl; return;} for(int i=0;i<4;i++) {int xx=tmp.x+dx[i]; int yy=tmp.y+dy[i]; if(maze[xx][yy]!='#'&&xx>0&&yy>0&&xx<=n&&yy<=m&&!vis[xx][yy]) { node tp; tp.x=xx; tp.y=yy; tp.step=tmp.step+1; vis[xx][yy]=1; q.push(tp); } } } cout << "不能走到那里!" << endl; } int main() { while(~scanf("%d%d",&n,&m)&&n!=0&&m!=0) { memset(vis,0,sizeof(vis));//给标记数组清零 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) {cin>>maze[i][j]; if(maze[i][j]=='S') {sx=i;sy=j;} if(maze[i][j]=='G') {ex=i;ey=j;} } bfs(); } }
相关文章推荐
- 迷宫的最短路径(BFS的简单应用)
- 题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
- 搜索入门(BFS)迷宫的最短路径
- 迷宫的最短路径 -- BFS
- hdu4230 Robot Navigation 迷宫最短路径的条数 BFS 很霸气!!!!!
- cdoj1088-王之迷宫 (三维迷宫最短路径)【BFS】
- 迷宫问题之最短路径bfs
- BFS 迷宫的最短路径问题
- 回溯法-bfs--迷宫问题的最短路径
- 迷宫的最短路径(bfs)
- BFS 迷宫的最短路径
- BFS 迷宫的最短路径
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 迷宫的最短路径 (BFS)
- BFS和DFS的差别,BFS实现迷宫最短路径
- (广度优先搜索第一课)迷宫的最短路径 - BFS
- OJ 3984 迷宫问题(BFS:迷宫最短路径且输出路径)
- 迷宫最短路径(bfs)
- bfs 迷宫输出最短路径
- POJ 3984 迷宫问题【迷宫最短路径 bfs】