版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wlxsq/article/details/77963544
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
string s[N]; // 整行读入;
int vis[N][N]; // 标记该位置是否走过,且记录是第几步走过
int n,m,k;
int check(int x,int y)
{
if(x>n-1||y>m-1||x<0||y<0) return 1;
if(vis[x][y]) return 2;
return 0;
}
int changeXY(int *x,int *y,char dir)
{
if(dir=='E'){
(*y)++;
}else if(dir=='W'){
(*y)--;
}else if(dir=='N'){
(*x)--;
}else if(dir=='S'){
(*x)++;
}
}
void dfs(int x,int y)
{
int ans;
int step=1;
// cout<<x<<' '<<y<<endl;
vis[x][y]=step++;
changeXY(&x,&y,s[x][y]);
// cout<<x<<' '<<y<<endl;
while(!(ans=check(x,y))){
// cout<<x<<' '<<y<<endl;
char dir=s[x][y];
vis[x][y]=step++;
changeXY(&x,&y,dir);
}
// cout<<ans<<endl;
// cout<<x<<' '<<y<<endl;
if(ans==1) cout<<step-1<<" step(s) to exit"<<endl;
else cout<<vis[x][y]-1<<" step(s) before a loop of "<<step-vis[x][y]<<" step(s)"<<endl;
}
int main()
{
while(cin>>n>>m&&n&&m){
memset(vis,0,sizeof(vis));
cin>>k;
for(int i=0;i<n;i++)
cin>>s[i];
dfs(0,k-1);
}
return 0;
}