`
lgh1992314
  • 浏览: 315620 次
文章分类
社区版块
存档分类
最新评论

poj_3984迷宫问题

 
阅读更多
迷宫问题
Time Limit:1000MS Memory Limit:65536K
Total Submissions:5387 Accepted:3066

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)


记录前驱,最后从(5,5)返回值(1,1)输出.


#include<iostream>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;
const int MAXN = 10;
int maps[MAXN][MAXN];
int visited[MAXN][MAXN];
int moves[4][2] = {-1,0,1,0,0,-1,0,1};
int ans;

struct Point{
	int x;
	int y;
	int step;
};

queue<Point>Q;
Point pre[MAXN][MAXN],path[30];


void BFS()
{
	while(!Q.empty())
		Q.pop();
	Point a,b;
	a.x = 0;
	a.y = 0;
	a.step = 0;
	visited[0][0] = 1;
	Q.push(a);
	while(!Q.empty())
	{
		a = Q.front();
		Q.pop();
		if(a.x==4&&a.y==4) 
		{
			break;
		}
		for(int i=0;i<4;i++)
		{
			b.x = a.x + moves[i][0];
			b.y = a.y + moves[i][1];
			if(b.x>=0&&b.y<5&&a.x>=0&&a.y<5&&!visited[b.x][b.y]&&!maps[b.x][b.y])
			{
				pre[b.x][b.y] = a;
				visited[b.x][b.y] = 1;
				b.step = a.step + 1;
				Q.push(b);
			}
		}
	}
	ans = a.step;
	for(int i=ans;i>=0;i--)
	{
		path[i] = a;
		a = pre[a.x][a.y];
	}
	for(int i=0;i<=ans;i++)
	{
		printf("(%d, %d)\n",path[i].x,path[i].y);
	}
}

int main()
{
	freopen("in.txt","r",stdin);
	int i,j;
	memset(pre,0,sizeof(pre));
	memset(maps,0,sizeof(maps));
	memset(visited,0,sizeof(visited));
	for(i=0;i<5;i++)
	{
		for(j=0;j<5;j++)
		{
			cin>>maps[i][j];
		}
	}
	BFS();
	//cout<<ans<<endl;

}






   
分享到:
评论

相关推荐

    POJ题目分析与理解

    POJ(Peking University Online Judge)是一款在线评测系统,旨在帮助程序员提高编程能力和解决问题的能力。该系统提供了大量的编程题目,涵盖了算法、数据结构、数学、动态规划、博弈论等多个领域。通过解决这些...

    POJ1840-Eqs

    6. **递归与回溯**:在解决某些复杂问题时,可能会用到递归或回溯法,如八皇后问题、迷宫问题等。 7. **贪心策略**:在某些情况下,可以采用贪心算法,每次做出局部最优决策,最终达到全局最优。 8. **模拟**:...

    poj 百练 题目分类

    POJ 百练 题目分类中,递归类题目包括菲波那契数列(2753)、二叉树(2756)、逆波兰表达式(2694)、放苹果(1664)、红与黑(2816)、八皇后问题(2754)、木棍问题(2817)、城堡(2815)、分解因数(2749)、...

    POJ题目及答案

    搜索算法如深度优先搜索、广度优先搜索和A*搜索等在解决迷宫问题、游戏AI等领域有广泛应用。 通过解答POJ题库中的题目,学习者不仅能提高编程技巧,还能锻炼自己的问题分析和算法设计能力。每道题目通常会有多种...

    POJ 部分题解 解题报告

    可能需要解决路径查找、迷宫求解等问题。 6. **POJ 3468 线段树--long long VS int.txt**:线段树是处理区间查询和更新的有效数据结构。这个题目可能关注的是在处理大整数时,线段树的实现细节,尤其是`long long`...

    POJ3026-Borg Maze【BFS+Prim】

    本篇文章将围绕北大POJ3026题目“Borg Maze”来探讨这两种算法在解决实际问题中的应用。 “Borg Maze”是一个迷宫问题,玩家需要从起点出发,通过迷宫找到最短路径到达终点。在这个问题中,我们可以将迷宫抽象为一...

    POJ题解及题目分类

    4. "1678 I Love this Game 解题报告.doc" 和 "1858 LiHaoyuan Interesting Maze Game.doc":同样,这些是游戏或迷宫类问题的解题报告,可能涉及路径搜索或状态空间搜索算法。 5. "1705_Generational Replacement....

    本人整理的POJ解题报告大全

    2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),在解决迷宫问题、树遍历和图遍历问题时非常有用。 3. **图论算法**:如最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树(Prim、Kruskal)...

    ACM POJ PKU 最全题目分类

    ### ACM POJ PKU 最全题目分类解析 #### 动态规划(DP) 在计算机科学领域,动态规划(Dynamic Programming, DP)是一种重要的算法思想,主要用于解决多阶段决策过程中的优化问题。它通过将原问题分解成相互重叠的...

    POJ 3083 Children of the Candy Corn解题报告

    ### POJ 3083 Children of the Candy Corn 解题报告 #### Description 题目描述了一个典型的迷宫问题:在一个玉米地迷宫中,游客需要找到从入口到出口的路径。题目给出了一个常见的策略:选择左墙或右墙并沿着它...

    POJ 3026 Borg Maze解题报告

    POJ 3026 Borg Maze是一道典型的图论问题,通过构建完全图并求解最小生成树来解决。虽然题目背景较为科幻,但其背后的数学原理和算法思想具有普适性,对于学习图论算法的同学来说是一个很好的练习案例。

    POJ 分类题目

    - **应用场景**:适用于迷宫问题、连通性检测等问题。 **2. 广度优先搜索** - **定义**:一种逐层扩展的搜索方式,从根节点开始,依次考虑所有节点。 - **示例题目**: - poj3278 - poj1426 - poj3126 - poj...

    POJ2251-Dungeon Master

    综合以上信息,我们可以推测"POJ2251-Dungeon Master"是一个涉及算法和编程的挑战,可能需要参赛者设计一种策略或算法来解决迷宫问题,例如寻找最短路径、最小消耗或者最佳战斗顺序。解题报告提供了问题的解决方案,...

    poj 部分题目源代码(共77题) for acm ,一年所做的

    8. 回溯法(Backtracking):八皇后问题、N皇后问题、迷宫求解等。 通过分析这些源代码,读者不仅可以学习到如何解决特定的编程问题,还能理解不同算法的实现细节,提升自己的编程和算法设计能力。同时,这些代码还...

    极角排序:POJ 1696(叉积+深搜)

    深度优先搜索(Deepth-First Search, DFS)则是一种图或树遍历的方法,常用于解决复杂结构的搜索问题,如迷宫求解、有向图的拓扑排序等。 结合标签“源码”和“工具”,我们可以推断这篇博客可能提供了解决POJ 1696...

    POJ部分代码

    8. **递归与回溯**:在解决复杂问题时,递归和回溯是常用的方法,如八皇后问题、迷宫问题等。 9. **记忆化搜索**:对于计算量大的问题,使用记忆化搜索可以减少重复计算,提高效率。 通过对这些代码的学习,我们...

    POJ中级搜索全部练习【解题报告+AC代码】

    在【压缩包子文件的文件名称列表】中,“搜索”可能是所有解题报告和AC代码的共同主题,这表明这些文件集中讨论了各种搜索算法的应用,例如可能包含不同的搜索问题实例,如迷宫寻路、图的遍历、状态空间搜索等。...

    hduoj poj 的题目分类

    7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理过程模拟等。 9. **位运算**:利用位运算快速解决一些问题,如奇偶性判断、数组操作等。 通过这两个平台的...

    图的深搜+回溯练习题:POJ2197

    在图的某些问题中,如八皇后问题、迷宫求解等,回溯法可以结合DFS一起使用,形成一种有效的解决方案。 在题目"POJ2197"中,虽然具体细节没有给出,但可以推测这可能是一个需要寻找特定路径或者解的问题,要求参赛者...

Global site tag (gtag.js) - Google Analytics