题目大意:一个机器人进入标记东西南北的图,判断是否能够走出来。
int main ()
{
introw,col,start;
inti,j;
intstep;
intnum;
charmap[100][100];
boolvisit[100][100];
while(cin>>row>>col>>start)
{
if(row==0 && col==0&& start==0)
break;
for(i=1;i<=row;i++)
for(j=1;j<=col;j++)
cin>>map[i][j];
i=1;
step=0;
num=0;
memset(visit,false,sizeof(visit));
while(i>=1 &&i<=row &&start>=1 &&start<=col &&!visit[i][start])
{
if(map[i][start]=='W' )
{
visit[i][start]=true;
start--;
step++;
continue;
}
if(map[i][start]=='E')
{
visit[i][start]=true;
start++;
step++;
continue;
}
if(map[i][start]=='N')
{
visit[i][start]=true;
i--;
step++;
continue;
}
if(map[i][start]=='S')
{
visit[i][start]=true;
i++;
step++;
continue;
}
}
if(visit[i][start])//如果是因为走到已经走过的点而退出,则从该点开始继续前进求出循环的num
{
memset(visit,false,sizeof(visit));
while(i>=1 &&i<=row &&start>=1 &&start<=col &&!visit[i][start])
{
if(map[i][start]=='W' )
{
visit[i][start]=true;
start--;
num++;
continue;
}
if(map[i][start]=='E')
{
visit[i][start]=true;
start++;
num++;
continue;
}
if(map[i][start]=='N')
{
visit[i][start]=true;
i--;
num++;
continue;
}
if(map[i][start]=='S')
{
visit[i][start]=true;
i++;
num++;
continue;
}
}
cout<<step-num<<"step(s) before a loop of"<<num<<"step(s)"<<endl;
}
else
//机器人走出来的话,直接输出step
cout<<step<<"step(s) to exit"<<endl;
}
return 0;
}
题目分析:机器人可能走出来,也可能在图中进入死循环,所以要定义一个数组标记该点是否走过。
题目代码:
#include <iostream>
//#include <string.h>
using namespace std;
//#include <string.h>