题意:给你一个图,然后每个点有个方向,问你什么时间能出去吗,或者什么时间形成一个循环。
题解:模拟一下即可。
注意这组数据:
2 2 1
SW
EN
应该输出:0 step(s) before a loop of 4 step(s)
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int a[100005];
int t,n;
int check()
{
for(int i=2;i<=n;i++)
if(a[i]!=a[i-1]) return 1;
return 0;
}
char map[105][105];int vis[105][105];
int main()
{
int n,m;
while(cin>>n>>m)
{
int k;
if(n==0&&m==0)break;cin>>k;
for(int i=1;i<=n;i++)cin>>map[i]+1;
int x=1,y=k;
int ans=0;
memset(vis,0,sizeof(vis));
int ans1=0;int flag=0;
while(1)
{
if(x<1||x>n||y<1||y>m) break;
if(vis[x][y]!=0||(x==1&&y==k&&ans!=0))
{
flag=1;
ans1=vis[x][y];break;
}
vis[x][y]=ans;
ans++;
if(map[x][y]=='N'){
x--;
}
else if(map[x][y]=='S')
{
x++;
}
else if(map[x][y]=='W')
{
y--;
}
else y++;
}
if(flag==0)
printf("%d step(s) to exit\n",ans);
else
{
printf("%d step(s) before a loop of %d step(s)\n",ans1,ans-ans1);
}
}
return 0;
}