很简单的图遍历,模拟即可,但我还是想了好长时间,好在1遍AC了
#include <iostream>
#include <cstring>
using namespace std;
char mat[15][15];
int vis[15][15];
int n,m,k,ct,q;
void dfs(int i,int j)
{
if(i<1||j<1||i>n||j>m)return;
if(vis[i][j])
{
q=ct-vis[i][j]+1;return;
}
if(!vis[i][j])
{
ct++;
vis[i][j]=ct;
if(mat[i][j]=='W')
dfs(i,j-1);
if(mat[i][j]=='E')
dfs(i,j+1);
if(mat[i][j]=='N')
dfs(i-1,j);
if(mat[i][j]=='S')
dfs(i+1,j);
}
}
int main()
{
while(cin>>n>>m>>k)
{
if(!n&&!m&&!k)break;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cin>>mat[i][j];
}
ct=0;q=0;
dfs(1,k);
if(q==0)
cout<<ct<<" step(s) to exit"<<endl;
else
cout<<ct-q<<" step(s) before a loop of "<<q<<" step(s)"<<endl;
}
return 0;
}