BFS迷宫(用队列解决迷宫问题

原创 2018年04月15日 23:01:53

[提交][状态][讨论版][命题人:quanxing]

题目描述

如图所示,迷宫的入口为(1,1),出口为(8,8)。用队列求迷宫

样例输出

1 1

2 1

3 1

4 1

5 1

5 2

5 3

6 3

6 4

6 5

7 5

8 5

8 6

8 7

8 8

在看了老师提供的题解后,感觉用指针写会十分麻烦而且感觉比较乱,就用自己的思路重新做了一下这道题。
#include<iostream>
#include<cstring>
#include<queue>
#include<stack>
using namespace std;
int map[50][50]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
int n[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
struct p{
	int x,y,prex,prey;
}x[50][50];
stack<p> o;//用于调整输出格式
queue<p> que; 
int dx,dy,i,v[50][50];
p k,l;
void bfs(int a,int b){
	while(!que.empty()){
		k=que.front();
		que.pop();
		for(i=0;i<4;i++){
			dx=k.x+n[i][0];
			dy=k.y+n[i][1];
			if(dx==8&&dy==8){
				v[dx][dy]=1;
				x[dx][dy].x=dx;x[dx][dy].y=dy;
				x[dx][dy].prex=k.x;x[dx][dy].prey=k.y;//记录前驱结点 
				return;//找到终点后就可以结束了 
			}
			else if(v[dx][dy]==0&&map[dx][dy]==0){
				v[dx][dy]=1;
				x[dx][dy].x=dx;x[dx][dy].y=dy;
				x[dx][dy].prex=k.x;x[dx][dy].prey=k.y;
				que.push(x[dx][dy]);
			}
		}
	}
}
int main(){
	memset(v,0,sizeof(v));
	l.x=1;l.y=1;l.prex=-1;l.prey=-1;
	v[1][1]=1;
	x[1][1]=l;
	que.push(l);
	bfs(1,1);
	while(x[dx][dy].prex!=-1&&x[dx][dy].prey!=-1){
		int w,e,x1,y1;
		w=x[dx][dy].prex;e=x[dx][dy].prey;
		o.push(x[dx][dy]);
		dx=w;dy=e;
	} 
	printf("1 1\n");
	while(!o.empty()){
		int x2=o.top().x;
		int y2=o.top().y;
		o.pop();
		printf("%d %d\n",x2,y2);
	}
	return 0;
} 
感觉代码中还有很多地方可以优化,有些地方写的也不是很清楚,若有人找到希望能给予指正


机器学习-Q-Learning-沙鼠走迷宫

-
  • 1970年01月01日 08:00

利用BFS、队列求解迷宫问题

利用BFS、队列求解迷宫问题POJ 3984Description 定义一个二维数组: int maze【5】【5】= { 0, 1, 0, 0, 0, 0, 1,...
  • ccnucswby
  • ccnucswby
  • 2016-07-22 14:46:04
  • 1522

POJ3984迷宫问题(BFS+队列+栈)

POJ-3984-迷宫问题 http://poj.org/problem?id=3984 大概思路:进行普通的BFS,用队列来操作。在保存路径的时候,可以用栈来输出路径,利用先进后出的特性。...
  • Seawindson
  • Seawindson
  • 2016-07-11 13:20:22
  • 596

迷宫求解算法(栈DFS以及队列BFS)

我们首先给出一个迷宫,它的规格是5 * 5,在这里我使用int的二维数组表示迷宫,其中1表示障碍,0表示可以通行的道路,要求从(0,0)坐标走到(4, 4)坐标,并输出走过的坐标路径。int maze...
  • laughing2333
  • laughing2333
  • 2015-11-03 17:35:53
  • 1941

栈和队列的底层实现及迷宫问题

一:栈 1.栈的应用背景          栈是一种线性数据结构,并且只能在某一端存数据和取数据。 关键词:先进先出。 2.栈的两种实现方法: 2.1用ArrayList实现栈 具体代码如...
  • shanxing2
  • shanxing2
  • 2012-10-22 17:27:13
  • 4178

队列的应用——求解迷宫问题

代码示例: #include using namespace std; const int MaxSize = 20; //迷宫最大行、列数 const int QueueSize = 10...
  • seu_nuaa_zc
  • seu_nuaa_zc
  • 2017-06-13 16:55:07
  • 984

经典迷宫问题 BFS 广度优先

给定一个迷宫,入口为左上角,出口为右下角,问是否有路径从入口到出口,若有则输出一条这样的路径。注意移动可以从上、下、左、右、上左、上右、下左、下右八个方向进行。迷宫输入0表示可走,输入1表示墙。易得可...
  • qq_26891045
  • qq_26891045
  • 2016-03-12 11:17:37
  • 1584

BFS+优先队列——迷宫最短路径——两种最优方法比较及详细图解

http://blog.csdn.net/qq_36523667/article/details/78638354 这个链接里是一道迷宫题。用到了BFS+优先队列。 我一直百思不得其解优先...
  • qq_36523667
  • qq_36523667
  • 2017-11-30 00:25:26
  • 275

用BFS解决迷宫问题

在一个n*n的矩阵里走,从原点(0,0)开始走到终点(n-1,n-1),只能上下左右4个方向走,只能在给定的矩阵里走,求最短步数。n*n是01矩阵,0代表该格子没有障碍,为1表示有障碍物。 in...
  • u014309268
  • u014309268
  • 2014-10-03 06:28:56
  • 1536

迷宫问题(栈,递归,队列)

这个迷宫问题的解答,主要参考了《LINUX一站式编程》中的第12章“栈与队列”的正文和习题。  假设有这样一个迷宫,用一个5*5的数组来表示,其中0表示有路可走,1表示无路可走。那么,如何找到一个通路...
  • feliciafay
  • feliciafay
  • 2013-07-30 10:50:49
  • 5680
收藏助手
不良信息举报
您举报文章:BFS迷宫(用队列解决迷宫问题
举报原因:
原因补充:

(最多只允许输入30个字)