传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1035
这题目最大的坑点在于:
The word "step" is always immediately followed by "(s)" whether or not the number before it is 1. |
这句话是没有用的!!!
输出根本没有分别单复数!
思路:模拟跑一遍,用vis记录走的步数。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char maze[25][25];
int vis[25][25];
int m,n,s;
int Exit,Loop,Go;
void dfs(int x,int y,int cnt)
{
if(x<1||x>m||y<1||y>n)//逃出生天
{
Exit=cnt;
return;
}
if(vis[x][y])//陷入循环
{
Go=vis[x][y]-1;
Loop=cnt-vis[x][y];
return;
}
vis[x][y]=cnt;
if(maze[x][y]=='W') dfs(x,y-1,cnt+1) ;
else if(maze[x][y]=='S') dfs(x+1,y,cnt+1);
else if(maze[x][y]=='E') dfs(x,1+y,cnt+1);
else dfs(x-1,y,cnt+1);
}
int main()
{
while(scanf("%d%d",&m,&n)&&m)
{
scanf("%d",&s);
getchar();
Exit=Loop=Go=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%c",&maze[i][j]);
}
getchar();
}
dfs(1,s,1);
if(Exit)
{
printf("%d step(s) to exit\n",Exit-1);
}
else
{
printf("%d step(s) before a loop of %d step(s)\n",Go,Loop);
}
}
return 0;
}