博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【每天一道算法题】走迷宫
阅读量:5773 次
发布时间:2019-06-18

本文共 1846 字,大约阅读时间需要 6 分钟。

输入描述:

输入包含多组数据。

每组数据包含一个10*10,由“#”和“.”组成的迷宫。其中“#”代表墙;“.”代表通路。
入口在第一行第二列;出口在最后一行第九列。
从任意一个“.”点都能一步走到上下左右四个方向的“.”点。

输出描述:

对应每组数据,输出从入口到出口最短需要几步。

 

输入例子:

#.######## #........# #........# #........# #........# #........# #........# #........# #........# ########.# #.######## #........# ########.# #........# #.######## #........# ########.# #........# #.######.# ########.#

走迷宫,不应该说是一道题,应该说是一类题。之前华为OJ上也有。不过它只要求计算能不能走出迷宫,并没有要求最少步数。

其实就是构建一棵树。出口节点所在的层数就是其最少的步数,而start节点就是根节点。在这棵树上执行BFS算法。

自定义一个struct存储坐标位置,及该节点,所在层数。

BFS:

1、根节点入队列(这里是start入队)

2、读取其周围位置,类似其孩子节点。

3、判断是否到达出口节点,走到其孩子节点,将其标志为visited。

 

如果最后没有到达出口节点且队列已空,说明无法找到路径至出口,返回0。

#include 
#include
#include
using namespace std; struct pos { int x; int y; int level;};int BFS(vector
>& map) { const int dir[4][2] = { {
1,0},{-1,0},{
0,1},{
0,-1} }; queue
q; int m = map.size(); int n = map[0].size(); vector
> visited(m, vector
(n, false)); pos start = { 0,1,0 }, end = { 9,8,0 }; q.push(start); visited[start.x][start.y] = true; while (!q.empty()) { pos tmp = q.front(), nextpos; q.pop(); for (int i = 0; i < 4; i++) { nextpos.x = tmp.x + dir[i][0]; nextpos.y = tmp.y + dir[i][1]; nextpos.level = tmp.level + 1; if (nextpos.x == end.x&&nextpos.y == end.y) return nextpos.level; if (nextpos.x >= 0 && nextpos.x < m&&nextpos.y >= 0 && nextpos.y < n&&visited[nextpos.x][nextpos.y] == false&&map[nextpos.x][nextpos.y]=='.') { q.push(nextpos); visited[nextpos.x][nextpos.y] = true; } } } return 0;} int main() { vector
> map(10, vector
(10)); while (cin >> map[0][0]) { for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) { if (i == 0 && j == 0) continue; cin >> map[i][j]; } cout << BFS(map) << endl; } return 0;}

 

转载于:https://www.cnblogs.com/LUO77/p/5813864.html

你可能感兴趣的文章
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
springmvc+swagger2
查看>>
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
cacti集成
查看>>
Android中的Cursor
查看>>
我的友情链接
查看>>
Java Web Application 自架构 一 注解化配置
查看>>
如何 debug Proxy.pac文件
查看>>
Python 学习笔记 - 面向对象(特殊成员)
查看>>
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
附件3:eclipse memory analyze使用教程
查看>>
oracle备份与恢复--rman
查看>>