迷宫的最短路径(BFS的简单应用)
来源:互联网 发布:概率图模型 知乎 编辑:程序博客网 时间:2024/05/18 00:43
【题目简述】:给定一个大小为n*m的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出起点到终点所需的最小步数。(注:本题假定从起点一定可以移动到终点)
如图:
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
【分析】:广度优先搜索是由近及远的搜索,所以在这个问题中采用BFS很合适,只要注意访问过的位置不再访问就好。同时本题中应用了一个很重要的方法,pair,这个可以再以后的编程中注意积累其使用方法,当然这个也可以换成是结构体变量。
详细见代码:
#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<algorithm>using namespace std;const int INF = 100000000;typedef pair<int ,int> P;char maze[100][100];int n,m;int sx,sy;int gx,gy;int d[100][100];int dx[4] = {1,0,-1,0};int dy[4] = {0,1,0,-1};int bfs(){queue<P> que;for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){d[i][j] = INF; }}que.push(P(sx,sy));d[sx][sy] = 0;while(que.size()){ P p = que.front();// 小的p 是 大P 类型的。 que.pop();if(p.first == gx && p.second == gy)break;for(int i = 0;i<4;i++){int nx = p.first + dx[i];int ny = p.second + dy[i];if(nx>=0 && nx<=n && ny>=0 && ny<=m && maze[nx][ny] != '#' &&d [nx][ny] == INF){que.push(P(nx,ny));d[nx][ny] = d[p.first][p.second] + 1;}}}return d[gx][gy];}int main(){cin>>n>>m;for(int i = 0;i<n;i++){for(int j = 0;j<n;j++){cin>>maze[i][j];if(maze[i][j] == 'G'){gx = i;gy = j;}if(maze[i][j] == 'S'){sx = i;sy = j;}}}int resourt = bfs();cout<<resourt<<endl;return 0;}
0 0
- 迷宫的最短路径(BFS的简单应用)
- 迷宫的最短路径 (BFS)
- BFS 迷宫的最短路径问题
- BFS:迷宫的最短路径
- BFS求迷宫的最短路径
- BFS 模板 【迷宫的最短路径】
- 迷宫的最短路径 -- BFS
- BFS 迷宫的最短路径
- 迷宫的最短路径(bfs)
- BFS 迷宫的最短路径
- 迷宫的最短路径 bfs
- 迷宫的最短路径-BFS算法
- ACM-迷宫的最短路径(bfs版)
- 搜索入门(BFS)迷宫的最短路径
- 迷宫的最短路径(深度bfs)
- 迷宫的最短路径(BFS,起点到终点)
- 题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
- 最简单的BFS入门题目——迷宫的最短路径
- android 9PNG图片制作
- SAP CRM Transaction Codes List
- Java读写Properties文件
- [Linux内存]linux内存分配函数总结
- activiti pom依赖
- 迷宫的最短路径(BFS的简单应用)
- 新闻代码
- [网络子系统] Netfilter机制分析
- 素材网
- 项目总算完工了
- 笔试面试(3)阿里巴巴2014笔试题详解(9月22北京)
- 命令别名与历史命令
- java实现单链表的基本操作
- Eclipse无法自动补全代码的解决办法