`
hellojyj
  • 浏览: 61693 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

POJ 3984 迷宫问题

    博客分类:
  • ACM
阅读更多
 
Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

[]   [Go Back]   [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)




分析:首先用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;
   }
 
0
0
分享到:
评论

相关推荐

    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 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