美文网首页
POJ3984——迷宫问题

POJ3984——迷宫问题

作者: xz闲语岁月 | 来源:发表于2017-08-03 17:45 被阅读0次

Problem

定义一个二维数组:
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)


思路

迷宫最短路模板题,借助queue,BFS即可,用stack辅助记录路径。

代码

#include<iostream>
#include<queue>
#include<stack>
using namespace std;
int maze[5][5],vis[5][5]={0},dist[5][5];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
struct Node {
    int x,y;
    Node(int x,int y):x(x),y(y){}
    Node(){}
}pre[5][5];
queue<Node> Q;

void BFS() {
    while(!Q.empty()) Q.pop();
    dist[0][0]=0;
    vis[0][0]=1;
    Q.push(Node(0,0));
    while(!Q.empty())  {
        Node node=Q.front();Q.pop();
        int x=node.x,y=node.y;
        for(int d=0;d<4;d++)  {
            int nx=x+dx[d];
            int ny=y+dy[d];
            if(nx>=0&&nx<5&&ny>=0&&ny<5&&vis[nx][ny]==0&&maze[nx][ny]==0)  {
                vis[nx][ny]=1;
                Q.push(Node(nx,ny));
                dist[nx][ny]=1+dist[x][y];
                pre[nx][ny]=Node(x,y);
                if(nx==4&&ny==4) return;
            }
        }
    }
}

int main()  {
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            cin>>maze[i][j];
    BFS();
    stack<Node> S;
    int cur_x=4,cur_y=4;
    while(1){
        S.push(Node(cur_x,cur_y));
        if(cur_x==0&&cur_y==0) break;
        int x=cur_x,y=cur_y;
        cur_x=pre[x][y].x;
        cur_y=pre[x][y].y;
    }
    while(!S.empty()){
        Node node=S.top();
        cout<<'('<<node.x<<", "<<node.y<<')'<<endl;
        S.pop();
    }
    return 0;
}

相关文章

  • POJ3984——迷宫问题

    Problem 定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0,...

  • poj3984 迷宫问题

    题目: Description定义一个二维数组: int maze[5][5]= {0, 1, 0, 0, 0,0...

  • 迷宫问题

    几个知识点: pair 用 make_pair(0,0) dfs探索之后要记得还原 int** maze的设置 一...

  • 迷宫问题

    1. 问题描述 有一个char[m][n]二维矩阵表示迷宫,其中'1'代表此位置为畅通,'0'代表此位置为障碍,小...

  • 迷宫问题

    深度优先遍历走迷宫 广度优先遍历走迷宫 代码见github

  • 迷宫问题

    method1 递归求解 method2 队列法 method3 栈和回溯法 有错误

  • 深度优先搜索

    全排列问题。 迷宫问题。

  • 迷宫问题求解

    一、目的 1、进一步理解和掌握各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法。 2、掌握分析问题,求解问题...

  • 回溯迷宫问题

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然...

  • 算法-迷宫问题(递归)

    迷宫问题:之前只用栈来实现,现在使用递归来实现。blog.csdn.net/feixiaoxing/article...

网友评论

      本文标题:POJ3984——迷宫问题

      本文链接:https://www.haomeiwen.com/subject/qinplxtx.html