HDU-1728逃离迷宫

//参考别人代码会的。。。。。

AC代码:

#include<stdio.h>
#include<string.h>
#define N 105
#define INF 0x3f3f3f3f
char map[N][N];
int x_move[4]={1,0,-1,0};
int y_move[4]={0,-1,0,1};
int wan[N][N];
int ex,ey,k,m,n;
int ok;
void dfs(int x,int y,int F)
{
    if(x==ex&&y==ey)
    {
        if(wan[x][y]<=k)
        {
            ok=1;
        }
        return;
    }
    if(wan[x][y]>k)
    {
        return;
    }
    if(wan[x][y]==k&&x!=ex&&y!=ey)
    {
        return;
    }
    for(int i=0;i<4;i++)
    {
        int tx=x+x_move[i];
        int ty=y+y_move[i];
        if(tx<0||tx>=m||ty<0||ty>=n)
            continue;
        if(map[tx][ty]=='*'||wan[tx][ty]<wan[x][y])
            continue;
        if(F!=-1&&F!=i&&wan[tx][ty]<wan[x][y]+1)
            continue;
        wan[tx][ty]=wan[x][y];
        if(F!=-1&&F!=i)
            wan[tx][ty]++;
        dfs(tx,ty,i);
        if(ok)
            return;
    }
}
int main()
{
    int x;
    scanf("%d",&x);
    while(x--)
    {
        int sx,sy;
        scanf("%d%d",&m,&n);
        int i,j;
        for(i=0;i<m;i++)
        {
            scanf("%s",map[i]);
        }
        scanf("%d%d%d%d%d",&k,&sy,&sx,&ey,&ex);
        sy--,sx--,ex--,ey--;
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                wan[i][j]=INF;
            }
        }
        ok=0;
        wan[sx][sy]=0;
        dfs(sx,sy,-1);
        if(ok)
        {
            printf("yes\n");
        }
        else
        {
            printf("no\n");
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值