博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫-BFS
阅读量:4942 次
发布时间:2019-06-11

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

迷宫问题
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 00 1 0 1 00 0 0 0 00 1 1 1 00 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来解决,这里需要注意的是结构体里要定义一个字符串变量用来保存走过的路。

#include 
#include
#include
using namespace std;#define MAXN 10//定义方向,顶部开始,顺时针int dir[4][2] = {
{-1, 0}, {0, 1}, {1, 0}, {0, -1}};int a[MAXN][MAXN];//作用:标记,走过的结点标记为1int 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
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;}

转载于:https://www.cnblogs.com/itbsl/p/9907864.html

你可能感兴趣的文章
Skip level 1 on 1
查看>>
【转】常见面试之机器学习算法思想简单梳理
查看>>
OC正则表达式的使用
查看>>
MySQL优化(三):优化数据库对象
查看>>
看到的一个很不错的分析LCA和RMQ的文章(转载,先收着)
查看>>
EXCEL公式及宏
查看>>
组合数学—容斥原理与鸽巢原理
查看>>
中国象棋棋子及棋盘的绘制
查看>>
socketserver剖析.html
查看>>
分享两个网址,一个是使用mssql自带的跟踪工具和分析工具
查看>>
[贪心][高精度][NOIP]国王游戏
查看>>
Java对象创建的过程及对象的内存布局与访问定位
查看>>
设计模式之二-Proxy模式
查看>>
QT--以共享的方式发布应用,QT依赖库
查看>>
JAVA——孪生素数
查看>>
Asp.net页面间传值方式汇总
查看>>
DB相关问题
查看>>
hibernate 的一对多关联关系映射配置
查看>>
# Mysql免登录重置root密码
查看>>
创造型模式-生成器模式
查看>>