【BFS】(三)迷宫问题+自己写数据结构(poj 3984)

好久不见啊,我终于更新了。

  • 题目
    poj 3984

  • 思路
    最基本,典型的BFS,居然卡了我这么多天。
    主要原因就是太忙(lan)。而且需要自己写个数据结构(用指针队列实现一个单向树)。好在题目给出的迷宫大小确定,可以用数组连续存储。
    从程序角度讲,我写的这个程序有一个毛病,就是如果没有到终点的路,会陷入死循环。不想改了……
    300K左右 空间优化留坑,日后研究

  • 代码
#include <cstdio>
#include <utility>

using namespace std;

int maze[5][5];

typedef pair<int ,int> P;

P res[25];

typedef struct node{
    int x,y;
    struct node *f;
}Node;

#define SIZE sizeof(Node)

Node que[25];
Node *head = que,*tail = que;

int nx[4]={0,0,-1,1},ny[4] = {1,-1,0,0};

void bfs()
{
    int k = 1,h = 0,t = 0;
    while(1){//problem:whileIMPOSSIBLE go deadloop
        Node *p = head;
        head = &que[++h];//delete //how to ++ cleverer?

        for(int i=0;i<4;i++){
            if((p->x+nx[i])>=0 && (p->x+nx[i])<5
               &&(p->y+ny[i])>=0 && (p->y+ny[i])<5
               && maze[(p->x)+nx[i]][(p->y)+ny[i]]==0){
                //push
                que[k].f = p;
                que[k].x = (p->x)+nx[i];
                que[k].y = (p->y)+ny[i];
                k++;
                tail = &que[++t];

                if(((tail->x)==4)&&((tail->y)==4)){
                    return;

                }
            }
        }
    }

    return;//return someIMPOSSIBLE
}

int main()
{
    //get maze
    int k=0;
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++){
            scanf("%d",&maze[i][j]);
            que[k++].f = NULL;//init fatherNode
        }


    que[0].x=0;que[0].y=0;//put root

    bfs();
    //get coor
    Node *p=tail;
    int n=0;
    while(p!=0){
        n++;
        res[n-1].first=p->x;
        res[n-1].second=p->y;

        p = p->f;
    }
    for(int i=n-1;i>=0;i--){
        printf("(%d, %d)\n",res[i].first,res[i].second);
    }

    return 0;
}

下面加点名言警句:

觉得不加有点空。
——CaptainFar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值