迷宫问题(BFS)

POJ 3984

迷宫问题是一个比较经典的搜索广搜题,题目还是放出来吧,需要看原题的可以直接去 POJ 上搜原题:
定义一个二维数组:

int maze[5][5] = {
0, 1, 0, 0, 0,
0, 1, 0, 1, 0,
0, 0, 0, 0, 0,
0, 1, 1, 1, 0,
0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

输入:
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

输出:
左上角到右下角的最短路径,格式如样例所示。

样例输入:

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0

输出:

(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)

题目分析:只能横着或者竖着走,所以方向只有四个(0,1),(1,0),(0,-1),(-1,0),可以用一个二维方向数组或者两个一维数组来表示。
迷宫的点可以看做一个二维坐标,用结构体来表示,广搜要用到队列,直接套板子,然后就是迷宫内的边界判断,以防越界。
由于题目要求输出走过的点,我们要有记录前节点的pr数组,最后在输出函数中输出所有的父节点即为路径。

下面给出具体代码:

//author : Lmry
//Time : 2021.5.17
//something else : Come on !#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#define M 5
#define N 5using namespace std;int maze[M][N],vis[M][N];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct point{int x;int y;
}pr[10][10];
queue<point> q;
void bfs(){point s;s.x=0,s.y=0;q.push(s);vis[0][0]=1;while(!q.empty()){point p=q.front();q.pop();if(p.x==M-1&&p.y==N-1){return;}for(int i=0;i<4;i++){int a,b;a=p.x+dx[i];b=p.y+dy[i];if(!maze[a][b]&&!vis[a][b]&&a>=0&&a<5&&b>=0&&b<5){point t;t.x=a;t.y=b;q.push(t);vis[a][b]=1;pr[a][b]=p;}}}
}
void output(point p){if(!p.x&&!p.y){cout<<"(0, 0)"<<endl;return;}output(pr[p.x][p.y]);cout<<"("<<p.x<<", "<<p.y<<")"<<endl;
}int main(){for(int i=0;i<5;i++){for(int j=0;j<5;j++){scanf("%d",&maze[i][j]);}}bfs();point end;end.x=4;end.y=4;output(end);
}

迷宫问题(经典BFS)相关推荐

  1. 任意大小迷宫自动生成+BFS寻路+生成无损迷宫bitmap(.BMP)图片

    目录标题 迷宫游戏 迷宫的生成 BFS寻找路线 最后的一些细枝末节 如何使用程序 链接 I TURN COFFEE INTO CODE! 800x800迷宫自动解路径 镇楼图 https://pan. ...

  2. BFS解迷宫问题(经典BFS算法)

    [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫 ...

  3. 里奥老师乾坤大挪移—深入浅出走迷宫问题之BFS算法1

    还是要从经典的走迷宫问题开始 DFS的思路是只选择一个方向,一条路走到黑,不撞南墙不回头. 而BFS的思路,每一步在走之前,我都要把所有的选择,所有的方向全看一遍,一层一层的往外扩展. 显然DFS比B ...

  4. ACM竞赛学习记录------迷宫寻宝(BFS广度优先搜索)

    题目 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上.下.左.右) ...

  5. POJ9384 迷宫(基金会BFS)

    本文来源于:http://blog.csdn.net/svitter 称号:让你从(0, 0)走到(4,4).而且输出路径. 输入数据:二位数组的迷宫:输出数据:路径: 题解:简单的BFS 注意: 1 ...

  6. Applese 走迷宫(优先队列+bfs)

    链接:https://ac.nowcoder.com/acm/problem/22344 来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m 的迷宫中 ...

  7. 误落迷宫2(BFS)

    题目描述 希里掉入三夫人的迷宫了,这是一个真正的迷宫,蜿蜒复杂,希里的目的只有一个,那就是找到三夫人,到达出口. 给定一个二维矩阵表示迷宫,你需要做到的是,从迷宫的出口处找到三夫人,再从三夫人处走向终 ...

  8. [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法

    迷宫问题的最短路,加最小字典序 迷宫文件maze.txt传送门 作者写的2019年B组蓝桥杯解集 . . . DFS的版本 #include<iostream> #include<c ...

  9. 不止代码:迷宫问题(bfs)

    题目描述 如下图所示,给出一个N*M的迷宫图和一个入口.一个出口. 编一个程序,打印一条从迷宫入口到出口的路径.这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示).只能往 ...

最新文章

  1. 浅谈C#中的异步编程
  2. oracle授权with,ORACLE权限关于with admin option和with grant option的用法
  3. 华为手机多久可以摆脱美国技术依赖?任正非放出豪言!
  4. 利用screen和nohup让Linux服务器后台运行程序
  5. VC下绘图程序Demo
  6. Git学习(二)远程仓库建立与克隆
  7. ectouch手机商城首页调用指定分类下的商品
  8. 《统计学习方法》——逻辑斯蒂回归
  9. python椭圆花瓣_python之花瓣美女下载详解
  10. mac u盘重装系统(monterey)
  11. 深度学习框架tensorflow学习与应用6(优化器SGD、ADAM、Adadelta、Momentum、RMSProp比较)
  12. [机器学习]基于OpenCV实现最简单的数字识别
  13. 十一、总结一下今天在SpringAOP中遇到的一个坑,事务控制一直失败,自己感觉代码没错的感觉,往底层看,很明了了
  14. Prometheus监控模板
  15. 美式英语音标词对照表
  16. 一定要学会的vsCode格式化整理代码的快捷键,再也不用手动调格式了
  17. javascript网页自动填表_javascript 自动填写表单
  18. 京东云宙斯上传单张图片php,京东api接入的几个坑(宙斯)
  19. 【ubuntu】Ubuntu 各版本代号简介
  20. IVM格式(互动媒体)

热门文章

  1. 【面试题系列】Java多线程常见面试题
  2. java计算机毕业设计某服装店网站源代码+数据库+系统+lw文档
  3. 微信小程序实现文字滚动
  4. C#练习题答案: 匕首【难度:1级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战
  5. 编程匕首Editplus
  6. HTTP客户端Fegin
  7. 小程序群发短信,借助云开发5行代码实现短信群发功能
  8. 自动驾驶数据集KITTI【4】画出自己车子以及照相机视野
  9. 蓝牙耳机哪个品牌好一点?音质好的蓝牙耳机推荐!
  10. 用Python爬取了上W表情包。快拿去欢乐斗图吧~