题目:http://acm.hdu.edu.cn/showproblem.php?pid=1035
简单的模拟题。
只要多一个记录步数的数组就可以了。最后输出注意格式。
#include<bits/stdc++.h>
#define PI 3.1415926
#define INF 1e18
using namespace std ;
typedef long long ll;
typedef unsigned long long ull;
const ll MAX = 1e3+50;
char M[MAX][MAX];
int M_s[MAX][MAX];
int x,y,m,n;
bool check(){
if(x<=0||x>m) return false;
if(y<=0||y>n) return false;
return true;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(cin>>n>>m){
if(!n&&!m) break;
y=1;
cin>>x;
memset(M_s,0,sizeof(M_s));
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= m ; j++)
cin>>M[i][j];
ll step = 0;
while(check()){
step++;
if(M_s[y][x]) break;
M_s[y][x] = step;
if(M[y][x]=='N'){//ÉÏ
y--;
continue;
}
else if(M[y][x]=='S'){//ÏÂ
y++;
continue;
}
else if(M[y][x]=='W'){//×ó
x--;
continue;
}
else if(M[y][x]=='E'){//ÓÒ
x++;
continue;
}
}
if(check())
cout<<M_s[y][x]-1<<" step(s) before a loop of "<<step-M_s[y][x]<<" step(s)"<<endl;
else
cout<<step<<" step(s) to exit"<<endl;
}
return 0;
}
/*10 step(s) to exit
3 step(s) before a loop of 8 step(s)*/