HDU 1728 逃离迷宫

简单搜索。记录一下到某个点,朝某个方向的最小转弯次数。

复制代码
#include<iostream>
#include<string>
#include<iomanip>
#include<string.h>
#include<algorithm>
#include<cstdio>
using namespace std;

int INF=0x7FFFFFFF;
const int maxn=100+5;
int n,m;
char s[maxn][maxn];
int MIN[5][maxn][maxn];
int X1,X2,Y1,Y2,K;

int dir[4][2]={
    {0,1},
    {1,0},
    {0,-1},
    {-1,0}
};
int flag;

bool P(int a,int b)
{
    if(a>=0&&a<=n-1)
    {
        if(b>=0&&b<=m-1)
        {
            if(s[a][b]!='*')
            {
                return 1;
            }
        }
    }
    return 0;
}

void dfs(int a,int b,int d,int tot)
{
    if(tot>K) return;
    if(a==X2&&b==Y2)
    {
        flag=1;
        return;
    }
    for(int i=0;i<4;i++)
    {
        int x=a+dir[i][0];
        int y=b+dir[i][1];

        if(P(x,y)==0) continue;

        if(i==d)
        {
            if(tot<MIN[i][x][y])
            {
                MIN[i][x][y]=tot;
                dfs(x,y,i,tot);
            }
        }

        else
        {
            if(tot+1<MIN[i][x][y])
            {
                MIN[i][x][y]=tot+1;
                dfs(x,y,i,tot+1);
            }
        }

    }

}

int main()
{
    int T; scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++) scanf("%s",s[i]);

        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                MIN[0][i][j]=INF;
                MIN[1][i][j]=INF;
                MIN[2][i][j]=INF;
                MIN[3][i][j]=INF;
            }
        scanf("%d%d%d%d%d",&K,&Y1,&X1,&Y2,&X2);
        X1--; Y1--; X2--; Y2--;
        
        flag=0;
        for(int i=0;i<4;i++)
        {
            MIN[i][X1][Y1]=0;
            dfs(X1,Y1,i,0);
            if(flag) break;
        }
        if(flag) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}
复制代码

 

posted @   Fighting_Heart  阅读(125)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
历史上的今天:
2015-05-03 hihoCoder挑战赛11 A 随机斐波那契
2015-05-03 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
2015-05-03 湖南多校对抗赛(2015.05.03)Problem B: War
2015-05-03 hdu 1305 Immediate Decodability
点击右上角即可分享
微信分享提示