zoukankan      html  css  js  c++  java
  • 迷宫问题 POJ 3984

    http://poj.org/problem?id=3984

    定义一个二维数组: 

    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 <iostream>
    #include <cstdio>
    #include <cstring>
    #include <stdlib.h>
    #include <math.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    #define maxn 521
    #define INF 0xfffffff
    int maps[maxn][maxn];
    int dir[4][2]= {{0,1},{1,0},{-1,0},{0,-1}};
    
    struct node
    {
        int x, y;
    }a[maxn][maxn];
    
    void DFS(int x, int y)
    {
        if(x == 0 && y == 0)
        {
            printf("(0, 0)
    ");
            return ;
        }
    
        DFS(a[x][y].x, a[x][y].y);
    
        printf("(%d, %d)
    ",x, y);
    }
    void BFS()
    {
        int i;
        queue<node>Q;
        node begins, now, next;
    
        begins.x = 0;
        begins.y = 0;
    
        Q.push(begins);
    
        while(Q.size())
        {
            now = Q.front();
            Q.pop();
    
            if(now.x == 4 && now.y == 4)
                return ;
    
            for(i=0; i<4; i++)
            {
                next.x = now.x + dir[i][0];
                next.y = now.y + dir[i][1];
    
                if(next.x>=0 && next.x<5 && next.y>=0 && next.y<5 && !maps[next.x][next.y])
                {
                    maps[next.x][next.y]=1;
                    a[next.x][next.y] = now;
                    Q.push(next);
                }
            }
        }
    
    }
    
    int main()
    {
        int i,j;
    
        for(i=0; i<5 ; i++)
        for(j=0; j<5; j++)
        scanf("%d", &maps[i][j]);
    
        BFS();
        DFS(4, 4);
    
        return 0;
    }
    View Code
    
    
    
     
  • 相关阅读:
    2017加油
    配置SSH框架的心得
    .net 中select和where的区别
    oracle查询中文数据出现乱码
    three.js 加载 obj模型
    下载别人的3D模型文件
    关闭按钮
    桌面截屏保存成gif形式(软件)
    vue 中引入 three.js
    three.js-地球贴图-TextureLoader
  • 原文地址:https://www.cnblogs.com/daydayupacm/p/5683406.html
Copyright © 2011-2022 走看看