模拟水题,题意:按照格子里对应的方向行走,看是否会离开房间,思路就是一步步走,用vis[MAXN][MAXN]看是否会进入死循环。如果进入死循环,遍在走一遍,看回到这点需要几步,并记录下来。
#include<iostream>
using namespace std;
const int MAXN = 12;
int main()
{
int step[MAXN][MAXN];
bool vis[MAXN][MAXN];
char Room[MAXN][MAXN];
int h_room,l_room,r_pos;
while(cin>>h_room>>l_room>>r_pos)
{
memset(step,0,sizeof(step));
memset(vis,false,sizeof(vis));
for(int i=0;i<MAXN;i++)
for(int j=0;j<MAXN;j++)
Room[i][j] = 'O';
if(h_room==0&&l_room==0&&r_pos==0)
break;
for(int i=1;i<=h_room;i++)
for(int j=1;j<=l_room;j++)
{
cin>>Room[i][j];
}
int a(1),b(r_pos),count(0);
while(1)
{
if(vis[a][b]==true)
{
cout<<step[a][b]<<" step(s) before a loop of "<<count-step[a][b]<<" step(s)"<<endl;
break;
}
step[a][b]=count;
char ch(Room[a][b]);
if(ch=='O')
{
cout<<count<<" step(s) to exit"<<endl;
break;
}
vis[a][b] = true;
switch(ch)
{
case 'N':a-=1;count++;continue;
case 'S':a+=1;count++;continue;
case 'E':b+=1;count++;continue;
case 'W':b-=1;count++;continue;
}
}
}
return 0;
}