迷宫问题(经典BFS)
迷宫问题(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)相关推荐
- 任意大小迷宫自动生成+BFS寻路+生成无损迷宫bitmap(.BMP)图片
目录标题 迷宫游戏 迷宫的生成 BFS寻找路线 最后的一些细枝末节 如何使用程序 链接 I TURN COFFEE INTO CODE! 800x800迷宫自动解路径 镇楼图 https://pan. ...
- BFS解迷宫问题(经典BFS算法)
[问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫 ...
- 里奥老师乾坤大挪移—深入浅出走迷宫问题之BFS算法1
还是要从经典的走迷宫问题开始 DFS的思路是只选择一个方向,一条路走到黑,不撞南墙不回头. 而BFS的思路,每一步在走之前,我都要把所有的选择,所有的方向全看一遍,一层一层的往外扩展. 显然DFS比B ...
- ACM竞赛学习记录------迷宫寻宝(BFS广度优先搜索)
题目 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入口.一些墙壁以及一个宝藏.由于迷宫是四连通的,即在迷宫中的一个位置,只能走到与它直接相邻的其他四个位置(上.下.左.右) ...
- POJ9384 迷宫(基金会BFS)
本文来源于:http://blog.csdn.net/svitter 称号:让你从(0, 0)走到(4,4).而且输出路径. 输入数据:二位数组的迷宫:输出数据:路径: 题解:简单的BFS 注意: 1 ...
- Applese 走迷宫(优先队列+bfs)
链接:https://ac.nowcoder.com/acm/problem/22344 来源:牛客网 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×m 的迷宫中 ...
- 误落迷宫2(BFS)
题目描述 希里掉入三夫人的迷宫了,这是一个真正的迷宫,蜿蜒复杂,希里的目的只有一个,那就是找到三夫人,到达出口. 给定一个二维矩阵表示迷宫,你需要做到的是,从迷宫的出口处找到三夫人,再从三夫人处走向终 ...
- [蓝桥杯2019初赛]迷宫-DFS、BFS两种方法
迷宫问题的最短路,加最小字典序 迷宫文件maze.txt传送门 作者写的2019年B组蓝桥杯解集 . . . DFS的版本 #include<iostream> #include<c ...
- 不止代码:迷宫问题(bfs)
题目描述 如下图所示,给出一个N*M的迷宫图和一个入口.一个出口. 编一个程序,打印一条从迷宫入口到出口的路径.这里黑色方块的单元表示走不通(用-1表示),白色方块的单元表示可以走(用0表示).只能往 ...
最新文章
- 浅谈C#中的异步编程
- oracle授权with,ORACLE权限关于with admin option和with grant option的用法
- 华为手机多久可以摆脱美国技术依赖?任正非放出豪言!
- 利用screen和nohup让Linux服务器后台运行程序
- VC下绘图程序Demo
- Git学习(二)远程仓库建立与克隆
- ectouch手机商城首页调用指定分类下的商品
- 《统计学习方法》——逻辑斯蒂回归
- python椭圆花瓣_python之花瓣美女下载详解
- mac u盘重装系统(monterey)
- 深度学习框架tensorflow学习与应用6(优化器SGD、ADAM、Adadelta、Momentum、RMSProp比较)
- [机器学习]基于OpenCV实现最简单的数字识别
- 十一、总结一下今天在SpringAOP中遇到的一个坑,事务控制一直失败,自己感觉代码没错的感觉,往底层看,很明了了
- Prometheus监控模板
- 美式英语音标词对照表
- 一定要学会的vsCode格式化整理代码的快捷键,再也不用手动调格式了
- javascript网页自动填表_javascript 自动填写表单
- 京东云宙斯上传单张图片php,京东api接入的几个坑(宙斯)
- 【ubuntu】Ubuntu 各版本代号简介
- IVM格式(互动媒体)