首页 > 其他 > 详细

POJ3984迷宫问题

时间:2020-07-24 10:39:28      阅读:65      评论:0      收藏:0      [点我收藏+]

最近开始刷算法题,发现迷宫这道网上很多代码对于我这种新人都很难看懂,就把自己想了许久的解法传到博客了,有心情会

补上想法。

 

#include<iostream>
#include<cstring>

using namespace std;

int maze[10][10];
int visited[10][10];
const int MAXN = 100;
struct Node
{
    int c,r;//当前的行,列坐标
    int f;// 记录父节点在队列中的下标
    Node(int cc, int rr, int ff):c(cc),r(rr),f(ff){}
    Node():c(0),r(0),f(0){}
};

Node myQueue[MAXN];

int head = 0;
int tail = 0;

// 入栈
void myEnque(Node x)
{
    myQueue[tail] = x;
    tail = (tail+1)%MAXN;// 形成循环队列
}

//判断是否为空
int isEmpty()
{
    if(head == tail) return 1;
    return 0;
}

void print(int n, int m)
{
   cout << "(" << myQueue[n].c << ", " <<  myQueue[n].r << ")" << endl;
   if(n <= m) print(n+1, m);
}

void Bfs(Node m)
{
    if(m.c == 4 && m.r == 4)
    {
        print(0,m.f);
        return;
    }
    // 向右走
    if(m.r < 4 && !maze[m.c][m.r+1] && !visited[m.c][m.r+1])
    {
        myEnque(Node(m.c,m.r+1,m.f+1));
        visited[m.c][m.r+1]=1;
        Bfs(Node(m.c,m.r+1,m.f+1));
    }

    // 向下走
    if(m.c < 4 && !maze[m.c+1][m.r] && !visited[m.c+1][m.r])
    {
        myEnque(Node(m.c+1,m.r,m.f+1));
        visited[m.c+1][m.r] = 1;
        Bfs(Node(m.c+1,m.r,m.f+1));
    }

    // 往回向左走
    if(m.r > 1 && m.r-1 >= 0 && !maze[m.c][m.r-1] && !visited[m.c][m.r-1])
    {
        visited[m.c][m.r-1]=1;
        myEnque(Node(m.c,m.r-1,m.f+1));
        Bfs(Node(m.c,m.r-1,m.f));
    }
    
    // 向上走
    if(m.c-1 >= 0 && m.c-1 >= 0 && !maze[m.c-1][m.r] && !visited[m.c-1][m.r])
    {
        myEnque(Node(m.c-1,m.r,m.f+1));
        visited[m.c-1][m.r]=1;
        Bfs(Node(m.c-1,m.r,m.f));
    }
    return;
}


int main()
{
    memset(visited,0,sizeof(visited));
    for(int i = 0; i < 5; ++i)
        for(int j = 0; j < 5; ++j)
            cin >> maze[i][j];
    Node start = Node(0,0,-1);
    myEnque(start);
    Bfs(start);
    return 0;
}

 

POJ3984迷宫问题

原文:https://www.cnblogs.com/ApStar/p/13369909.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!