dps简单模拟
如果能出去,输出步数
如果成环,输出成环前和环的步数
#include <iostream>
#include <cstring>
using namespace std;
char mp[1005][1005];
int d[4][2]={1,0,0,1,0,-1,-1,0},k,a,b,c,flag[1005][1005];
void dps(int x,int y)
{
if(x<=0||y<=0||x>a||y>b)
{
cout<<k<<" step(s) to exit"<<endl;
return;
}
if(flag[x][y]!=0)
{
cout<<flag[x][y]-1<<" step(s) before a loop of "<<k-flag[x][y]+1<<" step(s)"<<endl;
return;
}
if(mp[x][y]=='E')
{
k++;
flag[x][y]=k;
dps(x,y+1);
}
if(mp[x][y]=='W')
{
k++;
flag[x][y]=k;
dps(x,y-1);
}
if(mp[x][y]=='N')
{
k++;
flag[x][y]=k;
dps(x-1,y);
}
if(mp[x][y]=='S')
{
k++;
flag[x][y]=k;
dps(x+1,y);
}
}
int main()
{
while(cin>>a>>b>>c&&a+b)
{
memset(flag,0,sizeof(flag));
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
cin>>mp[i][j];
k=0;
dps(1,c);
}
return 0;
}