题目:http://poj.org/problem?id=1573
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
using namespace std;
int main(void)
{
int r,c,s;
while(cin>>r>>c>>s){
if(r==0)break;
char* map = new char[r*c];
int* vis = new int[r*c];
for(int i = 0; i < r*c; i++){
cin>>map[i];
vis[i]=0;
}
int rr = 0;
int cc = s-1;
int cnt1 = 0;
int cnt2 = 0;
while(rr>=0&&rr<r&&cc>=0&&cc<c){
vis[rr*c+cc] += 1;
if(vis[rr*c+cc]==1)cnt1++;
else if(vis[rr*c+cc]==2)cnt2++;
else if(vis[rr*c+cc]==3)break;
if(map[rr*c+cc]=='N'){
rr--;
}
else if(map[rr*c+cc]=='S'){
rr++;
}
else if(map[rr*c+cc]=='W'){
cc--;
}
else if(map[rr*c+cc]=='E'){
cc++;
}
}
if(cnt2==0)cout<<cnt1<<" step(s) to exit\n";
else cout<<cnt1-cnt2<<" step(s) before a loop of "<<cnt2<<" step(s)\n";
}
}
总结:水题