最简单的BFS入门题目——迷宫的最短路径
来源:互联网 发布:微课录制软件下载 编辑:程序博客网 时间:2024/05/21 10:00
迷宫的最短路径
给定一个大小为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(); }}
阅读全文
0 0
- 最简单的BFS入门题目——迷宫的最短路径
- 迷宫的最短路径(BFS的简单应用)
- 搜索入门(BFS)迷宫的最短路径
- BFS 迷宫的最短路径问题
- BFS:迷宫的最短路径
- BFS求迷宫的最短路径
- BFS 模板 【迷宫的最短路径】
- 迷宫的最短路径 -- BFS
- BFS 迷宫的最短路径
- 迷宫的最短路径 (BFS)
- 迷宫的最短路径(bfs)
- BFS 迷宫的最短路径
- 迷宫的最短路径 bfs
- 迷宫的最短路径-BFS算法
- 题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
- 迷宫最短路径(bfs)
- BFS 迷宫最短路径
- 迷宫的最短路径
- 网线和网络模块排序
- Maven学习:修改本地仓库路径
- 安卓根据身高计算标准体重,限制输入非数字的代码
- oj 常见错误总结
- C语言 求指数为n的对应的杨辉三角数列
- 最简单的BFS入门题目——迷宫的最短路径
- Golang
- java设计模式(十)——组合模式(Composite)
- 使用Yeelink点亮一个LED
- 《MFQ&PPDCS》学习心得--TCO(测试覆盖大纲)
- 抽象类、最终类和接口
- 精通棋牌游戏开发
- web.xml 中spring-servlet.xml 和 application.xml 配置位置及含义
- cURL error 56: Rev failure: Connection was reset (see http://curl.haxx.se/libcurl/c/libcurl-errors.h