题目链接:http://poj.org/problem?id=1573
题意:给你一个机器人,给你一张n*m的地图(包括S,N,W,E),告诉你机器人起始位置x(1,x),然后机器人就走这个图,然后有两中情况,走出去了或者走进了循环,就是样例那两种情况,输出结果就对了
解析:模拟题,直接开个vis数组记录,直接模拟就是了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <cmath>
#include <map>
using namespace std;
const int maxn = 1e5+100;
const int inf = 0x7ffffff;
char a[1005][1005];
int vis[1005][1005];
int main(void)
{
int n,m,x;
while(~scanf("%d %d",&n,&m))
{
if(n==0 && m==0)
break;
scanf("%d",&x);
for(int i=1;i<=n;i++)
scanf("%s",a[i]+1);
memset(vis,0,sizeof(vis));
for(int i=0;i<=m+1;i++)
{
vis[0][i] = -1;
vis[n+1][i] = -1;
}
for(int i=0;i<=n+1;i++)
{
vis[i][0] = -1;
vis[i][m+1] = -1;
}
int dx = 1,dy = x;
vis[dx][dy] = 1;
while(true)
{
int tx = dx,ty = dy;
if(a[dx][dy]=='S')
dx += 1;
else if(a[dx][dy]=='E')
dy += 1;
else if(a[dx][dy]=='W')
dy -= 1;
else
dx -= 1;
if(vis[dx][dy]!=0)
{
if(vis[dx][dy] == -1)
printf("%d step(s) to exit\n",vis[tx][ty]);
else
{
int ans1 = vis[tx][ty];
int ans2 = vis[dx][dy];
printf("%d step(s) before a loop of %d step(s)\n",ans2-1,ans1-ans2+1);
}
break;
}
vis[dx][dy] = vis[tx][ty]+1;
}
}
return 0;
}