迷宫问题
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(Peking University Online Judge)是一款在线评测系统,旨在帮助程序员提高编程能力和解决问题的能力。该系统提供了大量的编程题目,涵盖了算法、数据结构、数学、动态规划、博弈论等多个领域。通过解决这些...
6. **递归与回溯**:在解决某些复杂问题时,可能会用到递归或回溯法,如八皇后问题、迷宫问题等。 7. **贪心策略**:在某些情况下,可以采用贪心算法,每次做出局部最优决策,最终达到全局最优。 8. **模拟**:...
POJ 百练 题目分类中,递归类题目包括菲波那契数列(2753)、二叉树(2756)、逆波兰表达式(2694)、放苹果(1664)、红与黑(2816)、八皇后问题(2754)、木棍问题(2817)、城堡(2815)、分解因数(2749)、...
搜索算法如深度优先搜索、广度优先搜索和A*搜索等在解决迷宫问题、游戏AI等领域有广泛应用。 通过解答POJ题库中的题目,学习者不仅能提高编程技巧,还能锻炼自己的问题分析和算法设计能力。每道题目通常会有多种...
可能需要解决路径查找、迷宫求解等问题。 6. **POJ 3468 线段树--long long VS int.txt**:线段树是处理区间查询和更新的有效数据结构。这个题目可能关注的是在处理大整数时,线段树的实现细节,尤其是`long long`...
本篇文章将围绕北大POJ3026题目“Borg Maze”来探讨这两种算法在解决实际问题中的应用。 “Borg Maze”是一个迷宫问题,玩家需要从起点出发,通过迷宫找到最短路径到达终点。在这个问题中,我们可以将迷宫抽象为一...
4. "1678 I Love this Game 解题报告.doc" 和 "1858 LiHaoyuan Interesting Maze Game.doc":同样,这些是游戏或迷宫类问题的解题报告,可能涉及路径搜索或状态空间搜索算法。 5. "1705_Generational Replacement....
2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),在解决迷宫问题、树遍历和图遍历问题时非常有用。 3. **图论算法**:如最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树(Prim、Kruskal)...
### ACM POJ PKU 最全题目分类解析 #### 动态规划(DP) 在计算机科学领域,动态规划(Dynamic Programming, DP)是一种重要的算法思想,主要用于解决多阶段决策过程中的优化问题。它通过将原问题分解成相互重叠的...
### POJ 3083 Children of the Candy Corn 解题报告 #### Description 题目描述了一个典型的迷宫问题:在一个玉米地迷宫中,游客需要找到从入口到出口的路径。题目给出了一个常见的策略:选择左墙或右墙并沿着它...
POJ 3026 Borg Maze是一道典型的图论问题,通过构建完全图并求解最小生成树来解决。虽然题目背景较为科幻,但其背后的数学原理和算法思想具有普适性,对于学习图论算法的同学来说是一个很好的练习案例。
- **应用场景**:适用于迷宫问题、连通性检测等问题。 **2. 广度优先搜索** - **定义**:一种逐层扩展的搜索方式,从根节点开始,依次考虑所有节点。 - **示例题目**: - poj3278 - poj1426 - poj3126 - poj...
综合以上信息,我们可以推测"POJ2251-Dungeon Master"是一个涉及算法和编程的挑战,可能需要参赛者设计一种策略或算法来解决迷宫问题,例如寻找最短路径、最小消耗或者最佳战斗顺序。解题报告提供了问题的解决方案,...
8. 回溯法(Backtracking):八皇后问题、N皇后问题、迷宫求解等。 通过分析这些源代码,读者不仅可以学习到如何解决特定的编程问题,还能理解不同算法的实现细节,提升自己的编程和算法设计能力。同时,这些代码还...
深度优先搜索(Deepth-First Search, DFS)则是一种图或树遍历的方法,常用于解决复杂结构的搜索问题,如迷宫求解、有向图的拓扑排序等。 结合标签“源码”和“工具”,我们可以推断这篇博客可能提供了解决POJ 1696...
8. **递归与回溯**:在解决复杂问题时,递归和回溯是常用的方法,如八皇后问题、迷宫问题等。 9. **记忆化搜索**:对于计算量大的问题,使用记忆化搜索可以减少重复计算,提高效率。 通过对这些代码的学习,我们...
在【压缩包子文件的文件名称列表】中,“搜索”可能是所有解题报告和AC代码的共同主题,这表明这些文件集中讨论了各种搜索算法的应用,例如可能包含不同的搜索问题实例,如迷宫寻路、图的遍历、状态空间搜索等。...
7. **回溯与剪枝**:八皇后问题、N皇后问题、迷宫求解等。 8. **模拟**:模拟实际操作,如时间计算、物理过程模拟等。 9. **位运算**:利用位运算快速解决一些问题,如奇偶性判断、数组操作等。 通过这两个平台的...
在图的某些问题中,如八皇后问题、迷宫求解等,回溯法可以结合DFS一起使用,形成一种有效的解决方案。 在题目"POJ2197"中,虽然具体细节没有给出,但可以推测这可能是一个需要寻找特定路径或者解的问题,要求参赛者...