标签:
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 10968 | Accepted: 5319 |
Description

Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
题意:有n行m列,t列从北方进入的列数。每一个字母都是它的指令。如果机器人能走出去,输出走出的步数,若在里面转圈,输出第一个为到达圈之前的步数,输出第二个为从开始到转完一次圈的步数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int n,m,t;
int i,j;
char str[30][30];
char vis[30][30];
int cnt,loop;
int flag;
int x,y;
while(~scanf("%d %d %d",&n,&m,&t))
{
if(n==0&&m==0&&t==0)
break;
flag = 0;
cnt=1;
loop = 0;
memset(str,0,sizeof(str));
memset(vis,0,sizeof(vis));
for(i = 0; i<n; i++)
scanf("%s",str[i]);
x = 0;
y = t-1;
while(1)
{
if(str[x][y] == 'N'&&!vis[x][y])
{
vis[x][y] = cnt;
x--;
}
else if(str[x][y] == 'S' && !vis[x][y])
{
vis[x][y] = cnt;
x++;
}
else if(str[x][y] == 'E' && !vis[x][y])
{
vis[x][y] = cnt;
y++;
}
else if(str[x][y] == 'W' && !vis[x][y])
{
vis[x][y] = cnt;
y--;
}
else if(x < 0 || x >= n|| y<0 || y>=m)
{
cnt--;
break;
}
else if(vis[x][y]!=0)
{
cnt--;
loop = cnt-vis[x][y]+1;
flag = 1;
break;
}
cnt++;
}
if(flag)
printf("%d step(s) before a loop of %d step(s)\n",cnt-loop,loop);
else
printf("%d step(s) to exit\n",cnt);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/u013486414/article/details/42607733