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

hdu 4740 The Donkey of Gui Zhou(暴力搜索)

2013-09-15 17:22 513 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740

【题意】:

  森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次,都会朝着一个方向走,直到这个方向不能走,然后转向,驴只会右转,老虎只会左转,当转过一次之后还是不能往前走,那么它就停下来不再移动了。。。问驴和老虎是否能相遇在一个坐标点。。。

【题解】:

  暴力搜索,模拟过程就能过,不存在超时问题

【code】:

/*
JudgeStatus:Accepted  time:15MS
Memory:4212K    codeLenght:2591B
Language:C++    Author:cj
*/
#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;
#define N 1010

int mark

;
int n;

int cx[]={0,1,0,-1};
int cy[]={1,0,-1,0};
int stop1,stop2;
int x,y,flag;

void solve(int r1,int c1,int d1,int r2,int c2,int d2)
{
int x1,y1,x2,y2;
x1=r1;
y1=c1;
x2=r2;
y2=c2;
while(1)
{
r1=x1,c1=y1,r2=x2,c2=y2;
if(flag) break;
if(!stop1)  //判断驴是否已经停止移动
{
x1=r1+cx[d1];
y1=c1+cy[d1];
if(x1>=0&&x1<n&&y1>=0&&y1<n&&mark[x1][y1]!=1&&mark[x1][y1]!=3)
{
mark[x1][y1]+=1;
}
else
{
d1 = (d1+1)%4;
x1=r1+cx[d1];
y1=c1+cy[d1];
if(!(x1>=0&&x1<n&&y1>=0&&y1<n&&mark[x1][y1]!=1&&mark[x1][y1]!=3))
{
stop1=1;
x1=r1;
y1=c1;
}
else
{
mark[x1][y1]+=1;
}
}
}
if(!stop2)  //判断老虎是否已经停止移动
{
x2=r2+cx[d2];
y2=c2+cy[d2];
if(x2>=0&&x2<n&&y2>=0&&y2<n&&mark[x2][y2]!=2&&mark[x2][y2]!=3)
{
mark[x2][y2]+=2;
}
else
{
d2 = (d2+3)%4;
x2=r2+cx[d2];
y2=c2+cy[d2];
if(!(x2>=0&&x2<n&&y2>=0&&y2<n&&mark[x2][y2]!=2&&mark[x2][y2]!=3))
{
stop2=1;
x2=r2;
y2=c2;
}
else
{
mark[x2][y2]+=2;
}
}
}
if(x1==x2&&y1==y2) //当老虎和驴相遇
{
x=x1;
y=y1;
flag=1;
return ;
}
if(stop1+stop2==2)  //当老虎和驴都停止移动且不在同一坐标,返回不可达
{
flag=-1;
}
}
}

int main()
{
while(~scanf("%d",&n)&&n)
{
int r1,c1,r2,c2,d1,d2;
scanf("%d%d%d",&r1,&c1,&d1);
scanf("%d%d%d",&r2,&c2,&d2);
memset(mark,0,sizeof(mark));
flag=stop1=stop2=0;
mark[r1][c1]=1;
mark[r2][c2]=2;
if(r1==r2&&c1==c2)
{
printf("%d %d\n",r1,c1);
continue;
}
solve(r1,c1,d1,r2,c2,d2);
if(flag==-1)
{
puts("-1");
}
else
{
printf("%d %d\n",x,y);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: