地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=64128#problem/B
A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are
N north (up the page)
S south (down the page)
E east (to the right on the page)
W west (to the left on the page)
For example, suppose the robot starts on the north (top) side of Grid 1 and starts south (down). The path the robot follows is shown. The robot goes through 10 instructions in the grid before leaving the grid.
Compare what happens in Grid 2: the robot goes through 3 instructions only once, and then starts a loop through 8 instructions, and never exits.
You are to write a program that determines how long it takes a robot to get out of the grid or how the robot loops around.
Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
题意:本题是从一个初始位置开始走,按照W左走,E右走,N上走,S下走的规则进行执行,如果可以走出所给矩阵,求出走了多少步,如果走进了一个循环,求从开始到走到循环用了多少步。
用一个变量step记录所走的步数,同时用量srr【x】【y】一个变量记录走到每一个点时一共走了多少步。同时将走过的点标记。
(1)、可以走出矩阵:走的步数就是step的值。
(2)、走入一个循环:走到一个循环初始位置的步数就是srr【x】【y】-1.
#include<stdio.h>
#include<string.h>
int step,row,column;
int a[1010][1010];
char map[11][11];
void DFS(int x,int y)
{
while(x>=0 && y>=0 && x<row && y<column && map[x][y]!='O')
{
if(map[x][y]=='N')
{
map[x][y]='O';
a[x][y]=++step;
x--;
}
else if(map[x][y]=='S')
{
map[x][y]='O';
a[x][y]=++step;
x++;
}
else if(map[x][y]=='E')
{
map[x][y]='O';
a[x][y]=++step;
y++;
}
else if(map[x][y]=='W')
{
map[x][y]='O';
a[x][y]=++step;
y--;
}、、while循环已经将所有的情况考虑完全
}
if(map[x][y]=='O')
printf("%d step(s) before a loop of %d step(s)\n",a[x][y]-1,step+1-a[x][y]);
else
printf("%d step(s) to exit\n",step);
}
int main()
{
int i,start,x,y;
while(scanf("%d%d%d",&row,&column,&start)!=EOF)
{
if(row==0||column==0)
break;
for(i=0;i<row;i++)
scanf("%s",map[i]);
x=0;
y=start-1;
step=0;
DFS(x,y);
}
return 0;
}