关闭

poj--3984--迷宫问题(bfs+路径记录)

181人阅读 评论(0) 收藏 举报
分类:
Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

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)


这道题不难,只是以前路径记录没有掌握好,水一水

#include<stdio.h>
#include<string.h>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
#define MAX 10
int map[MAX][MAX];
bool vis[MAX][MAX];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
struct node
{
	int x,y,prex,prey;
};
node path[MAX][MAX];
node st,ed;
void putpath(int x,int y)
{
	stack<node>p;
	node now=path[x][y];
	while(1)
	{
		p.push(now);
		if(now.x==0&&now.y==0)
		break;
		now=path[now.prex][now.prey];
	}
	while(!p.empty())
	{
		now=p.top();
		p.pop();
		printf("(%d, %d)\n",now.x,now.y);
	}
}
bool check(node a)
{
	if(map[a.x][a.y]==1||a.x<0||a.y>4||a.y<0||a.x>4)
	return 0;
	return 1;
} 
void bfs()
{
	memset(vis,0,sizeof(vis));
	queue<node>q;
	st.x=0,st.y=0;
	q.push(st);
	vis[0][0]=1;
	while(!q.empty())
	{
		st=q.front();
		q.pop();
		if(st.x==4&&st.y==4)
		{
			path[st.x][st.y]=st;
			break;
		}
		for(int i=0;i<4;i++)
		{
			ed.x=st.x+dx[i];
			ed.y=st.y+dy[i];
			if(check(ed)&&!vis[ed.x][ed.y])
			{
				vis[ed.x][ed.y]=1;
				ed.prex=st.x;
				ed.prey=st.y;
				path[ed.x][ed.y]=ed;
				q.push(ed); 
			}
		}
	}
}
int main()
{
	for(int i=0;i<5;i++)
	{
		for(int j=0;j<5;j++)
		scanf("%d",&map[i][j]);
	}
	bfs();
	putpath(4,4);
	return 0;
}



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

POJ3984 迷宫问题(BFS+记录路径)

题意: 迷宫找出口问题,要求输出最短路径 要点: 普通迷宫找出口问题我倒是会做,但这题要记录路径,所以抓瞎了。看了一下,主要是要用一个队列数组来实现队列,用front指向当前pop出的结点,用r...
  • SeasonJoe
  • SeasonJoe
  • 2016-03-23 15:48
  • 765

poj3984迷宫问题【bfs+记录路径】

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11236   Accepted...
  • R1986799047
  • R1986799047
  • 2015-08-06 10:16
  • 738

bfs迷宫问题--打印路径

/*定义一个二维数组: 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, ...
  • yuanba_xs
  • yuanba_xs
  • 2017-01-31 13:13
  • 363

走迷宫--图的搜索(bfs)并记录路径

题目描述: 一个网格迷宫由n行m列的单元格组成,每个单元格要么是空地(用1表示),要么是障碍物(用0来表示)。你的任务是找一条从起点到终点的最短步数和移动序列,其中UDLR表示上下左右操作。任何时候...
  • ly59782
  • ly59782
  • 2016-03-30 20:47
  • 2832

POJ 3984 迷宫问题 BFS+记录路径

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15775   Accepted...
  • major_zhang
  • major_zhang
  • 2016-07-30 16:33
  • 267

BFS解迷宫问题,并打印最短路径

第一行两个整数n, m,为迷宫的长宽。   接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。假设你现在已经在迷宫坐标(1,1)的地方,即左上角,迷宫的...
  • wangwei6125
  • wangwei6125
  • 2016-02-03 16:48
  • 1148

迷宫最短路径问题解析

有一个二维数组,0表示路,-1表示墙,求其中任意两点的最短路径。 我们先看,怎么求一条路径:求两点路径是一个数据结构上的典型的迷宫问题,很多数据结构的书上都有介绍,解决办法如下: 从一点开...
  • a1259109679
  • a1259109679
  • 2015-08-29 09:47
  • 6930

POJ.3894 迷宫问题 (BFS+记录路径)

POJ.3894 迷宫问题 (BFS+记录路径)题意分析定义一个二维数组: int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0...
  • pengwill97
  • pengwill97
  • 2017-07-29 10:32
  • 79

POJ 3984 迷宫问题 【BFS+路径记录】

题面:定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...
  • SCaryon
  • SCaryon
  • 2017-04-27 23:03
  • 148

POJ 3984:迷宫问题(BFS+路径记录)

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7560   Accepted: 4426 ...
  • u013487051
  • u013487051
  • 2014-07-19 15:22
  • 866
    个人资料
    • 访问:151313次
    • 积分:7523
    • 等级:
    • 排名:第3354名
    • 原创:628篇
    • 转载:7篇
    • 译文:0篇
    • 评论:23条
    最新评论