迷宫-BFS
迷宫问题
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status
### Description
```
定义一个二维数组:
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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
### Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
### Output
左上角到右下角的最短路径,格式如样例所示。
### Sample Input
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
### Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
最简单的求最短路径问题,用BFS来解决,这里需要注意的是结构体里要定义一个字符串变量用来保存走过的路。
```c++
#include <queue>
#include <string.h>
#include <iostream>
using namespace std;
#define MAXN 10
//定义方向,顶部开始,顺时针
int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
int a[MAXN][MAXN];
//作用:标记,走过的结点标记为1
int vis[MAXN][MAXN];
struct Node
{
int x;
int y;
string s; //字符串s保存走过的结点
}now, nextStep;
//判断结点能否通过
bool isPracticable(Node node)
{
//当超出边界,或者已经被标记访问过,或者遇到障碍物都不能再通过
if (node.x < 0 || node.x > 5 || node.y < 0 || node.y > 5 || vis[node.x][node.y] || a[node.x][node.y]) {
return 0;
}
return 1;
}
void BFS()
{
queue<Node> Q;
now.x = 0;
now.y = 0;
now.s = "00";
Q.push(now);
vis[now.x][now.y] = 1;
while (!Q.empty()) {
//获取队列首部元素
now = Q.front();
if (now.x == 4 && now.y == 4) { //走到右下角,输出结果
for (int i = 0; i < now.s.length(); i = i + 2) {
cout << "(" << now.s[i] << ", " << now.s[i+1] << ")" << endl;
}
return;
}
for (int i = 0; i < 4; i++) { //按照上、右、下、左的方向搜索,搜索方向可随意,但是要保证四个方向都被搜索一遍
nextStep.x = now.x + dir[i][0];
nextStep.y = now.y + dir[i][1];
nextStep.s = now.s;
if (isPracticable(nextStep)) {
char x = nextStep.x + 48;
char y = nextStep.y + 48;
nextStep.s += x;
nextStep.s += y;
Q.push(nextStep);
vis[nextStep.x][nextStep.y] = 1;
}
}
//把对首元素排出队列
Q.pop();
}
}
int main(int argc, const char * argv[]) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cin >> a[i][j];
}
}
BFS();
return 0;
}
迷宫-BFS的更多相关文章
- ZOJ 1649 Rescue(有敌人迷宫BFS)
题意 求迷宫中从a的位置到r的位置须要的最少时间 经过'.'方格须要1s 经过'x'方格须要两秒 '#'表示墙 因为有1s和2s两种情况 须要在基础迷宫bfs上加些推断 令到达每一个点的时间初 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- poj 1383 Labyrinth【迷宫bfs+树的直径】
Labyrinth Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 4004 Accepted: 1504 Descrip ...
- hdu_1728_逃离迷宫(bfs)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1728 题意:走迷宫,找最小的拐角 题解:对BFS有了新的理解,DFS+剪枝应该也能过,用BFS就要以拐 ...
- hdu 1728 逃离迷宫 (BFS)
逃离迷宫 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- HDU1728-逃离迷宫-BFS
逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1026(迷宫 BFS+打印)
题意是要穿过一个迷宫并且将每一步打印出来. 用宽搜的方法找到路径,在 vis 中存一下方向,只是这题被看到的一种不太对的运算符重载坑了很久...... 代码如下: #include <bits/ ...
- Applese走迷宫-bfs
链接:https://ac.nowcoder.com/acm/contest/330/C来源:牛客网 题目描述 精通程序设计的 Applese 双写了一个游戏. 在这个游戏中,它被困在了一个 n×mn ...
- hdu 1728 逃离迷宫 bfs记转向
题链:http://acm.hdu.edu.cn/showproblem.php?pid=1728 逃离迷宫 Time Limit: 1000/1000 MS (Java/Others) Mem ...
随机推荐
- Nginx和PHP-FPM的启动、重启、停止脚本分享
这篇文章主要介绍了Nginx和PHP-FPM的启动.重启.停止脚本分享,脚本中包含start.stop.reload.restart等常用的管理方法,并可以加入系统服务然后使用servicem命令管理 ...
- 服务监控-zabbix监控指标
1.cpu unitzation 监控cpu的整体状态. 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比[简称id] CPU user time:用 ...
- log4j 配置日志输出(log4j.properties)
轉: https://blog.csdn.net/qq_29166327/article/details/80467593 一.入门log4j实例 1.1 下载解压log4j.jar(地址:http: ...
- 关于js中操作数组的一些方法
网上找的通篇看了一遍讲的很透收藏了! 转自(https://www.cnblogs.com/blogs-8888/p/6518683.html) 1.锁定数组的长度(让数组的长度变成只读). 1 2 ...
- python实现bt种子 torrent转magnet
Python实现bt转磁链 参考前人资料主要两种方式 1,利用python的bencode模块 2,安装libtorrent模块 尝试过两种方法特记录 环境:Windows系统 python 3 ...
- mac 下 tomcat7的安装
1.到 apache官方主页 下载 tomcat7 版本的完整 tar.gz 安装包 解压拷贝到 /Library目录下,并命名为Tomcat. 2.修改目录权限,终端输入 sudo chmod ...
- ----改写superheros的json以及上传到github----
以下为js代码: var header = document.querySelector('header'); var section = document.querySelector('sectio ...
- session随笔
·由于cookie中不能保存很多信息,于是Session出现来完成这个功能. ·Session的作用就是在服务器保存一些保存一些用户的数据,然后传递给用户一个名字为JSESSIONID的Cookie, ...
- vue 图片下载到本地,图片保存到本地
必须同源(访问的网站域名与服务器域名一致)才能下载 downs() { var alink = document.createElement("a"); alink.href = ...
- 移动端canvas文字图片合成并生成图片(canvas宽度自适应移动端屏幕)
这是我之前做的一个关于文字图片合成的代码,供大家参考,不足支出还望体谅:具体的注释在代码里都有,有什么不懂了可以留言互相交流.<!DOCTYPE html> <html lang=& ...