HDU 1010 Tempter of the Bone

来源:互联网 发布:长脸男生发型 知乎 编辑:程序博客网 时间:2024/06/16 18:55

题意:S是当前点,D是门,T是时间,X是墙,点是路,问是否能在T时间内达到,如果达到输出YES否则输出NO。

思路:dfs加上奇偶剪枝

0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1      0到0一定是偶数步,1到1必定是偶数步,0到1和1到0一定是奇数步,从而快速判断是否能到达
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0

#include<stdio.h>
#include<string.h>
int bu[4][2]= {0,1,0,-1,1,0,-1,0},n,m,t;
int Map1[10][10];
char Map[10][10];
struct node
{
    int x,y;
} S,D;
int DD;
int dfs(int x,int y,int z)
{
    if(z<0)
        return 0;
    if(x==D.x&&y==D.y&&z==0)
    {
        return 1;
    }
    int i;
    if(x%2==0&&y%2==0||(x%2==1&&y%2==1))
    {
        if(DD==1&&z%2==0||(DD==0&&z%2==1))
            return 0;
    }
    else
    {
        if(z%2==0&&DD%2==0||(DD%2==1&&z%2==1))
            return 0;
    }


    for(i=0; i<4; i++)
    {
        int aa=x+bu[i][0];
        int bb=y+bu[i][1];
        if(aa>=0&&aa<n&&bb>=0&&bb<m&&Map1[aa][bb]==0&&Map[aa][bb]!='X')
        {
            Map1[aa][bb]=1;
            int cc=dfs(aa,bb,z-1);
            Map1[aa][bb]=0;
            if(cc)
                return 1;
        }
    }
    return 0;
}
int main()
{
    int i,j;
    while(scanf("%d%d%d",&n,&m,&t)!=EOF&&(n+m+t)!=0)
    {
        for(i=0; i<n; i++)
            scanf("%s",Map[i]);
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
            {
                if(Map[i][j]=='S')
                {
                    S.x=i;
                    S.y=j;
                }
                if(Map[i][j]=='D')
                {
                    D.x=i;
                    D.y=j;
                }
            }
        }
        if(D.x%2==0&&D.y%2==0||(D.x%2==1&&D.y%2==1))
            DD=0;
        else
            DD=1;
        Map1[S.x][S.y]=1;
        int aa=dfs(S.x,S.y,t);
        if(aa)
            printf("YES\n");
        else
            printf("NO\n");
        Map1[S.x][S.y]=0;
    }
    return 0;
}
/*
4 4 5
S.X.
..X.
..XD
....
3 4 5
S.X.
..X.
...D
2 2 3
..
SD
3 4 5
....
SXD.
....
6 6 10
....XD
......
......
......
.X....
S.....
4 3 5
.XD
...
.X.
S..
0 0 0
*/

0 0
原创粉丝点击