博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
迷宫问题//bfs
阅读量:6571 次
发布时间:2019-06-24

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

题目:
 
迷宫问题
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 31544   Accepted: 18065

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)

 

思路:

//用队列来广搜,然后走过的地方标记下并沿路建并查集,然后用并查集回溯并把点放到栈里,最后pop栈输出结果

 

代码:

#include 
#include
#include
using namespace std;int graph[7][7];//存图bool marked[7][7];//标记走过的点struct pos{ int x; int y;};queue
q;pos un[7][7];//并查集,用于找回路stack
s;//用于回路逆序输出void init()//初始化{ pos t; for(int i = 0; i < 7; i++) { for(int j = 0; j < 7; j++) { t.x = i; t.y = j; un[i][j] = t; graph[i][j] = 1;//图周围放一圈墙 marked[i][j] = false; } }}void bfs()//广搜{ //创建起始点 pos p; p.x = p.y = 1; q.push(p); marked[1][1] = true; //搜索所有点 while(!q.empty()) { pos c = q.front(); q.pop(); pos t = c; t.x++; //搜索当前点周围的可走点并放入队列中 if(graph[t.x][t.y]==0 && !marked[t.x][t.y]) { q.push(t); marked[t.x][t.y]=true; un[t.x][t.y] = c; } t.x-=2; if(graph[t.x][t.y]==0 && !marked[t.x][t.y]) { q.push(t); marked[t.x][t.y]=true; un[t.x][t.y] = c; } t.x++; t.y++; if(graph[t.x][t.y]==0 && !marked[t.x][t.y]) { q.push(t); marked[t.x][t.y]=true; un[t.x][t.y] = c; } t.y-=2; if(graph[t.x][t.y]==0 && !marked[t.x][t.y]) { q.push(t); marked[t.x][t.y]=true; un[t.x][t.y] = c; } }}int main(){ //初始化 init(); //输入 for(int i = 1; i <= 5; i++) { for(int j = 1; j <= 5; j++) cin >> graph[i][j]; } bfs(); pos t; t.x = t.y = 5; //利用并查集从终点回溯,并把点放入栈中 while(t.x != un[t.x][t.y].x || t.y != un[t.x][t.y].y) { s.push(t); t = un[t.x][t.y]; } t.x = t.y = 1; s.push(t); //pop栈,输出结果 while(!s.empty()) { t = s.top(); s.pop(); printf("(%d, %d)\n",t.x-1,t.y-1); } return 0;}

 

转载于:https://www.cnblogs.com/w-j-c/p/9218897.html

你可能感兴趣的文章
Facebook开源图像处理库Spectrum,优化移动端图像生成
查看>>
精通敏捷测试
查看>>
搞容器,必须考虑这五大安全要素
查看>>
从程序员到架构师的最佳技术成长之路
查看>>
为什么中台是传统企业数字化转型的关键?
查看>>
使用模板将Web服务的结果转换为标记语言
查看>>
inno setup 打包脚本学习
查看>>
php 并发控制中的独占锁
查看>>
禁止微信浏览器的下拉滑动
查看>>
从pandas到geopandas
查看>>
LOL设计模式之「策略模式」
查看>>
用express搭建网站
查看>>
使用kNN算法实现简单的手写文字识别
查看>>
ReactJS 开发过程中的一些使用心得
查看>>
如何在 Swift 中进行错误处理
查看>>
[Leetcode] Factor Combinations 因数组合
查看>>
用tinypng插件创建gulp task压缩图片
查看>>
浅谈DOMContentLoaded事件及其封装方法
查看>>
BetaMeow----利用机器学习做五子棋AI
查看>>
APM终端用户体验监控分析(下)
查看>>