Time Limit: 1000MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
定义一个二维数组:
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
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) 分析:首先用BFS,遍历迷宫,找到最短路径,并且遍历过程中,标记走过的点。遍历完成后,从终点回到 起点,因为有人走过从起点走到过终点,那么一定可以从终点回到,起点这也就是寻找走过路径的最好理 解方式。
#include<queue> #include<string.h> #include<stdio.h> using namespace std; struct Point { int i; int j; }; Point path[50]; Point p; queue<Point>q; int dir[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; int visit[10][10]; int main( ) { int road[6][6],i,j,k,xx,yy,a,b,len=0; memset(visit,0,sizeof(visit)); for(i=0;i<5;i++){ for(j=0;j<5;j++){ scanf("%d",&road[i][j]); } } p.i=0; p.j=0; q.push(p); visit[0][0]=1; while(!q.empty()) { p=q.front(); q.pop(); for(i=0;i<4;i++) { xx=p.i+dir[i][0]; yy=p.j+dir[i][1]; if(xx<0||xx>4||yy<0||yy>4)continue; if(road[xx][yy]==0&&!visit[xx][yy]) { visit[xx][yy]=visit[p.i][p.j]+1; if(xx==4&&yy==4) { len=visit[xx][yy]; break; } Point newP; newP.i=xx; newP.j=yy; q.push(newP); } } } p.i=4,p.j=4; for(i=len-1;i>=0;i--) { path[i].i=p.i; path[i].j=p.j; for(j=0;j<4;j++) { xx=p.i+dir[j][0]; yy=p.j+dir[j][1]; if(xx<0||xx>4||yy<0||yy>4)continue; if((visit[xx][yy]==visit[p.i][p.j]-1)) { p.i=xx; p.j=yy; break; } } } for(i=0;i<len;i++) printf("(%d, %d)\n",path[i].i,path[i].j); return 0; }
相关推荐
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 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"中,虽然具体细节没有给出,但可以推测这可能是一个需要寻找特定路径或者解的问题,要求参赛者...