您的位置:首页 > 产品设计 > UI/UE

HDU 4740——The Donkey of Gui Zhou

2015-07-22 17:18 489 查看
题意:驴跟老虎一起走,问什么时候能相遇

题目的意思是在一个地方只能转一次弯。。坑了好长时间

代码如下:

[code]#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <map>
#include <string>
#include <queue>
#include <bitset>
using namespace std;

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

int n;

bool judge(int x,int y)
{
    if(x<0||x>=n)return false;
    if(y<0||y>=n)return false;
    return true;
}
struct Pos
{
    int x,y;
};
Pos don;
int dd;
Pos tir;
int td;
bool visd[1005][1005];
bool vist[1005][1005];

bool solve()
{
    memset(visd,0,sizeof(visd));
    memset(vist,0,sizeof(vist));
    visd[don.x][don.y]=1;
    vist[tir.x][tir.y]=1;
    bool cantir=1;
    bool candon=1;
    while(cantir||candon){
//            cout<<don.x<<' '<<don.y<<' '<<tir.x<<' '<<tir.y<<endl;
        if(don.x==tir.x&&don.y==tir.y){ printf("%d %d\n",don.x,don.y);return true;}

        if(candon){
            Pos to;
            to.x=don.x+dir[dd][0];
            to.y=don.y+dir[dd][1];
            if(judge(to.x,to.y)&&!visd[to.x][to.y]){
                don.x=to.x;don.y=to.y;
                visd[don.x][don.y]=1;
            } else {
                    dd=(dd+1)%4;
                    to.x=don.x+dir[dd][0];
                    to.y=don.y+dir[dd][1];
                    if(judge(to.x,to.y)&&!visd[to.x][to.y]){
                        don.x=to.x;don.y=to.y;
                        visd[don.x][don.y]=1;
                    } else {
                        candon=0;
                    }
//                    if(pre==dd){candon=0;break;}
            }
        }

        if(cantir){
            Pos to;
            to.x=tir.x+dir[0];
            to.y=tir.y+dir[1];
            if(judge(to.x,to.y)&&!vist[to.x][to.y]){
                tir.x=to.x;tir.y=to.y;
                vist[tir.x][tir.y]=1;
            } else {
                    td=td-1;
                    if(td == -1)td=3;
                    to.x=tir.x+dir[0];
                    to.y=tir.y+dir[1];
                    if(judge(to.x,to.y)&&!vist[to.x][to.y]){
                        tir.x=to.x;tir.y=to.y;
                        vist[tir.x][tir.y]=1;
                    } else cantir=0;
//                if(pre==td){cantir=0;break;}
            }
        }
        if(don.x==tir.x&&don.y==tir.y){ printf("%d %d\n",don.x,don.y);return true;}
    }
    return false;
}

int main()
{
//    freopen("data.txt","r",stdin);
    while(scanf("%d",&n)!=EOF&&n){
        scanf("%d%d%d",&don.x,&don.y,&dd);
        scanf("%d%d%d",&tir.x,&tir.y,&td);
        if(!solve()){
            puts("-1");
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: