中国海洋大学第四届朗讯杯高级组 A 2718 Rocky(模拟)

时间:2024-04-27 02:38:54

题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2718

题意:优先直走,右 左 后。。。。

思路:

我定义的朝向 已经 d[]的先后次序。。。。。

  3  
2   1
  4  
 #include <cstring>
#include <cstdio>
using namespace std; int dx[]={,,-,,};
int dy[]={,,,,-};
struct node
{
int x,y,tow,step;
}pos,before;
int main()
{
int i,col,row,r;
int G[][];
int x,y,sx,sy,f,count=;
while(~scanf("%d%d%d",&col,&row,&r)&&(col||row||r))
{
memset(G,,sizeof(G));
for(i=; i<r; i++)
{
scanf("%d%d",&x,&y);
G[x][y]=;
}
scanf("%d%d",&sx,&sy);
if(sx==)
f=;
else if(sx==col)
f=;
else if(sy==)
f=;
else if(sy==row)
f=;
pos.step=; pos.tow=f;
pos.x=sx; pos.y=sy;
for(i=; ;i++)
{
if(pos.tow==)
{
if(pos.x>=col)
break;
if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
}
else if(pos.tow==)
{
if(pos.x<=)
break;
if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
}
else if(pos.tow==)
{
if(pos.y>=row)
break;
if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
}
else if(pos.tow==)
{
if(pos.y<=)
break;
if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
else if(G[pos.x+dx[]][pos.y+dy[]]==)
{
pos.x=pos.x+dx[];
pos.y=pos.y+dy[];
pos.step++;
pos.tow=;
}
}
if(pos.x>=&&pos.x<=col&&pos.y>=&&pos.y<=row)
{
before.x=pos.x; before.y=pos.y;
}
}
printf("Case %d: ",count++);
if(pos.x>=&&pos.x<=col&&pos.y>=&&pos.y<=row)
printf("%d %d %d\n",pos.x,pos.y,pos.step);
else
printf("%d %d %d\n",before.x,before.y,pos.step-);
}
return ;
}