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

HDU 4740 The Donkey of Gui Zhou

2013-09-16 07:50 387 查看

The Donkey of Gui Zhou

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 308 Accepted Submission(s): 118

[align=left]Problem Description[/align]
There was no donkey in the province of Gui Zhou, China. A trouble maker shipped one and put it in the forest which could be considered as an N×N grid. The coordinates of the up-left cell is (0,0) , the down-right cell is (N-1,N-1) and the cell below the up-left cell is (1,0)..... A 4×4 grid is shown below:

#include<iostream>
#include<cstdio>
#include<cstring>
#define UP 3
#define DOWN 1
#define LEFT 2
#define RIGHT 0

using namespace std;

class POINT
{
public:
int x;
int y;
bool operator != (const POINT &p) const
{
if(x==p.x&&y==p.y)
return false;
return true;
}
};

int n;

int donkey_dir,tiger_dir;
bool donkey_end,tiger_end;
bool donkey_map[1010][1010],tiger_map[1010][1010];
POINT donkey_current,tiger_current;

int main()
{
while(scanf("%d",&n))
{
if(n==0)
break;
memset(donkey_map,false,sizeof(donkey_map));
memset(tiger_map,false,sizeof(tiger_map));
donkey_end=tiger_end=false;
int r,c,d;
scanf("%d %d %d",&r,&c,&d);
POINT temp;
temp.x=r+1;
temp.y=c+1;
donkey_current=temp;
donkey_dir=d;
scanf("%d %d %d",&r,&c,&d);
temp.x=r+1;
temp.y=c+1;
tiger_current=temp;
tiger_dir=d;
for(int i=0;i<=n+1;i++)
{
tiger_map[i][0]=tiger_map[i][n+1]=donkey_map[i][0]=donkey_map[i][n+1]=true;
tiger_map[0][i]=tiger_map[n+1][i]=donkey_map[0][i]=donkey_map[n+1][i]=true;
}

while(tiger_current!=donkey_current)
{
if(donkey_end&&tiger_end)
break;
if(!donkey_end)
{
int x=donkey_current.x;
int y=donkey_current.y;
if(donkey_dir==UP)
{
if(donkey_map[x-1][y])
{
if(donkey_map[x][y+1])
donkey_end=true;
else
{
temp.x=x;
temp.y=y+1;
donkey_current=temp;
donkey_map[x][y]=true;
donkey_dir=RIGHT;
}
}
else
{
temp.x=x-1;
temp.y=y;
donkey_current=temp;
donkey_map[x][y]=true;

}
}
else if(donkey_dir==RIGHT)
{
if(donkey_map[x][y+1])
{
if(donkey_map[x+1][y])
donkey_end=true;
else
{
temp.x=x+1;
temp.y=y;
donkey_current=temp;
donkey_map[x][y]=true;
donkey_dir=DOWN;
}
}
else
{
temp.x=x;
temp.y=y+1;
donkey_current=temp;
donkey_map[x][y]=true;
}
}
else if(donkey_dir==DOWN)
{
if(donkey_map[x+1][y])
{
if(donkey_map[x][y-1])
donkey_end=true;
else
{
temp.x=x;
temp.y=y-1;
donkey_current=temp;
donkey_map[x][y]=true;
donkey_dir=LEFT;
}
}
else
{
temp.x=x+1;
temp.y=y;
donkey_current=temp;
donkey_map[x][y]=true;
}
}
else if(donkey_dir==LEFT)
{
if(donkey_map[x][y-1])
{
if(donkey_map[x-1][y])
donkey_end=true;
else
{
temp.x=x-1;
temp.y=y;
donkey_current=temp;
donkey_map[x][y]=true;
donkey_dir=UP;
}
}
else
{
temp.x=x;
temp.y=y-1;
donkey_current=temp;
donkey_map[x][y]=true;
}
}
}
if(!tiger_end)
{
int x=tiger_current.x;
int y=tiger_current.y;
if(tiger_dir==UP)
{
if(tiger_map[x-1][y])
{
if(tiger_map[x][y-1])
tiger_end=true;
else
{
temp.x=x;
temp.y=y-1;
tiger_current=temp;
tiger_map[x][y]=true;
tiger_dir=LEFT;
}
}
else
{
temp.x=x-1;
temp.y=y;
tiger_current=temp;
tiger_map[x][y]=true;
}
}
else if(tiger_dir==RIGHT)
{
if(tiger_map[x][y+1])
{
if(tiger_map[x-1][y])
tiger_end=true;
else
{
temp.x=x-1;
temp.y=y;
tiger_current=temp;
tiger_map[x][y]=true;
tiger_dir=UP;
}
}
else
{
temp.x=x;
temp.y=y+1;
tiger_current=temp;
tiger_map[x][y]=true;
}
}
else if(tiger_dir==DOWN)
{
if(tiger_map[x+1][y])
{
if(tiger_map[x][y+1])
tiger_end=true;
else
{
temp.x=x;
temp.y=y+1;
tiger_current=temp;
tiger_map[x][y]=true;
tiger_dir=RIGHT;
}
}
else
{
temp.x=x+1;
temp.y=y;
tiger_current=temp;
tiger_map[x][y]=true;
}
}
else if(tiger_dir==LEFT)
{
if(tiger_map[x][y-1])
{
if(tiger_map[x+1][y])
tiger_end=true;
else
{
temp.x=x+1;
temp.y=y;
tiger_current=temp;
tiger_map[x][y]=true;
tiger_dir=DOWN;
}
}
else
{
temp.x=x;
temp.y=y-1;
tiger_current=temp;
tiger_map[x][y]=true;
}
}
}
}
if(tiger_current!=donkey_current)
cout<<"-1"<<endl;
else
cout<<tiger_current.x-1<<" "<<tiger_current.y-1<<endl;
}

return 0;
}


[C++]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: