hdu 4740 搜索

来源:互联网 发布:淘宝客外部论坛 编辑:程序博客网 时间:2024/05/16 17:12

模拟下就行。。。。。。。

下午的时候在每次改变方向后没改变tf和df的值。。。。。这人生该是有多艰难。。。。。。T_T

#include<iostream>#include <cstdio>#include <cstring>using namespace std;const int MAX_SIZE=1000+10;int n;int tx,ty,tf;int dx,dy,df;int rd[MAX_SIZE][MAX_SIZE];int rt[MAX_SIZE][MAX_SIZE];bool Dgo(){    if(df==0)    {        if(dy+1<n&&rd[dx][dy+1]==0)        {            dy++;            rd[dx][dy]=1;            return true;        }        if(dx+1<n && rd[dx+1][dy]==0)        {            dx++;            df = 1;            rd[dx][dy]=1;            return true;        }        return false;    }    else if(df==1)    {        if(dx+1<n&&rd[dx+1][dy]==0)        {            dx++;            rd[dx][dy]=1;            return true;        }        if(dy>0 && rd[dx][dy-1]==0)        {            dy--;            df = 2;            rd[dx][dy]=1;            return true;        }        return false;    }    else if(df==2)    {        if(dy>0&&rd[dx][dy-1]==0)        {            dy--;            rd[dx][dy]=1;            return true;        }        if(dx>0 && rd[dx-1][dy]==0)        {            dx--;            df = 3;            rd[dx][dy]=1;            return true;        }        return false;    }    else    {        if(dx>0&&rd[dx-1][dy]==0)        {            dx--;            rd[dx][dy]=1;            return true;        }        if(dy<n-1 && rd[dx][dy+1]==0)        {            dy++;            df = 0;            rd[dx][dy]=1;            return true;        }        return false;    }}bool Tgo(){    if(tf==0)    {        if(ty<n-1&&rt[tx][ty+1]==0)        {            ty++;            rt[tx][ty]=1;            return true;        }        if(tx>0 && rt[tx-1][ty]==0)        {            tx--;            tf = 3;            rt[tx][ty]=1;            return true;        }        return false;    }    else if(tf==1)    {        if(tx<n-1&&rt[tx+1][ty]==0)        {            tx++;            rt[tx][ty]=1;            return true;        }        if(ty<n-1 && rt[tx][ty+1]==0)        {            ty++;            tf = 0;            rt[tx][ty]=1;            return true;        }        return false;    }    else if(tf==2)    {        if(ty>0&&rt[tx][ty-1]==0)        {            ty--;            rt[tx][ty]=1;            return true;        }        if(tx<n-1 && rt[tx+1][ty]==0)        {            tx++;            tf = 1;            rt[tx][ty]=1;            return true;        }        return false;    }    else    {        if(tx>0&&rt[tx-1][ty]==0)        {            tx--;            rt[tx][ty]=1;            return true;        }        if(ty>0 && rt[tx][ty-1]==0)        {            ty--;            tf = 2;            rt[tx][ty]=1;            return true;        }        return false;    }}int main(){    while(scanf("%d",&n) && n)    {        scanf("%d%d%d",&dx,&dy,&df);        scanf("%d%d%d",&tx,&ty,&tf);        memset(rd,0,sizeof(rd));        memset(rt,0,sizeof(rt));        rd[dx][dy]=1;        rt[tx][ty]=1;        while(1)        {            if(tx==dx && ty==dy)            {                printf("%d %d\n",tx,ty);                break;            }            bool d=Dgo();            bool t=Tgo();            if(!d&&!t)            {                puts("-1");                break;            }        }    }    return 0;}


 

原创粉丝点击