您的位置:首页 > 其它

Robot Motion(POJ 1573 模拟题)

2013-08-07 16:21 561 查看
~题目链接~

http://poj.org/problem?id=1573

输入

3 6 5
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0

结果

10 step(s) to exit
3 step(s) before a loop of 8 step(s)

输入行数、列数、机器人的位置

机器人可以出去,则输出步数

否则,则输出循环的始端和终端

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int fx[4]= {-1,1,0,0};
int fy[4]= {0,0,-1,1};
int map[20][20],vis[20][20],st[20][20];
int flag,step,n,m,k,x,y;

void DFS(int i,int j)
{
int I,J;
st[i][j]=++step;
I=i+fx[map[i][j]];
J=j+fy[map[i][j]];
if(I<0 || I>=n || J<0 || J>=m)
return;
if(!vis[I][J])
{
vis[i][j]=1;
DFS(I,J);
}
else
{
flag=1;
x=st[I][J]-1;
y=st[i][j]-st[I][J]+1;
return;
}
}

int main()
{
char str;
while(~scanf("%d%d%d",&n,&m,&k) && (n!=0 || m!=0 || k!=0))
{
getchar();
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
memset(st,0,sizeof(st));
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
scanf("%c",&str);
if(str=='N') map[i][j]=0;
if(str=='S') map[i][j]=1;
if(str=='W') map[i][j]=2;
if(str=='E') map[i][j]=3;
}
getchar();
}
flag=0;
step=0;
DFS(0,k-1);
if(flag)
printf("%d step(s) before a loop of %d step(s)\n",x,y);
else
printf("%d step(s) to exit\n",step);
}

return 0;
}


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