迷宫问题 poj 3984

1.题目:迷宫问题

2.题意:一个5 × 5的二维数组,表示一个迷宫。0表示通路,1表示墙,输出从左上角到右下角的最短路径。

3.思路:简单bfs,递归输出路径。

4.代码:

#include<stdio.h>
#include<string.h>
int map[6][6];
int visit[25][25];
int pre[100];
int dir[4][2]= {1,0,-1,0,0,1,0-1};
struct Node
{
    int x,y;
} a[30];
void print(int x)
{
    int m=pre[x];
    if(m==0)
    {
        printf("(0, 0)\n");
        printf("(%d, %d)\n",a[x].x,a[x].y);
        return ;
    }
    else
    {
        print(m);
        printf("(%d, %d)\n",a[x].x,a[x].y);
    }
}
void bfs()
{
    memset(visit,0,sizeof(visit));
    Node cur,change;
    int front=0;
    int rear=1;
    a[0].x=0;
    a[0].y=0;
    pre[0]=-1;
    while(front<rear)
    {
        int tx,ty;
        cur.x=a[front].x;
        cur.y=a[front].y;
        if(cur.x==4&&cur.y==4)
        {
            print(front);
            return ;
        }
        else
        {
            for(int i=0; i<4; i++)
            {
                tx=cur.x+dir[i][0];
                ty=cur.y+dir[i][1];
                if(tx>=0&&tx<5&&ty>=0&&ty<5&&visit[tx][ty]==0&&map[tx][ty]==0)
                {
                    visit[tx][ty]=1;
                    a[rear].x=tx;
                    a[rear].y=ty;
                    pre[rear]=front;
                    rear++;
                }
            }
            front++;
        }
    }
    return ;
}
int main()
{
    int i,j;

    for(i=0; i<5; i++)
    {
        for(j=0; j<5; j++)
        {
            scanf("%d",&map[i][j]);
        }
    }
    bfs();
    return 0;
}


 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值