http://poj.org/problem?id=1573
题目大意:
一个机器人已经被编程 按照图中的指令行走 问能否走出图
能走出则输出步数
不能走出则输出到达环的步数和环的步数
分析:
模拟机器人行走 将走过的路变成所走的步数 能走出输出步数 不能走出(碰到已被改变不是方向的位置即是环的开始位置) 位置步数即是入环的步数
AC代码:
#include <stdio.h>
#include <string.h>
char map[20][20];
int r,w,s;
int flag;
int len;
void search(int x,int y,int step){
if(flag)
return ;
if(map[x][y]=='E'){
map[x][y]=(len++);// 走过的路变成步数
if(y+1>w){
flag=1;
printf ("%d step(s) to exit\n",step+1);
return ;
}
else if(map[x][y+1]!='E'&&map[x][y+1]!='W'&&map[x][y+1]!='N'&&map[x][y+1]!='S'){// 判断是否成环
flag=1;
printf ("%d step(s) before a loop of %d step(s)\n",map[x][y+1],map[x][y]-map[x][y+1]+1);
return ;
}
search(x,y+1,step+1);
}
else if(map[x][y]=='W'){
map[x][y]=(len++);
if(y-1<=0){
flag=1;
printf ("%d step(s) to exit\n",step+1);
return ;
}
else if(map[x][y-1]!='E'&&map[x][y-1]!='W'&&map[x][y-1]!='N'&&map[x][y-1]!='S'){
flag=1;
printf ("%d step(s) before a loop of %d step(s)\n",map[x][y-1],map[x][y]-map[x][y-1]+1);
return ;
}
search(x,y-1,step+1);
}
else if(map[x][y]=='N'){
map[x][y]=(len++);
if(x-1<=0){
flag=1;
printf ("%d step(s) to exit\n",step+1);
return ;
}
else if(map[x-1][y]!='E'&&map[x-1][y]!='W'&&map[x-1][y]!='N'&&map[x-1][y]!='S'){
flag=1;
printf ("%d step(s) before a loop of %d step(s)\n",map[x-1][y],map[x][y]-map[x-1][y]+1);
return ;
}
search(x-1,y,step+1);
}
else{
map[x][y]=(len++);
if(x+1>r){
flag=1;
printf ("%d step(s) to exit\n",step+1);
return ;
}
else if(map[x+1][y]!='E'&&map[x+1][y]!='W'&&map[x+1][y]!='N'&&map[x+1][y]!='S'){
flag=1;
printf ("%d step(s) before a loop of %d step(s)\n",map[x+1][y],map[x][y]-map[x+1][y]+1);
return ;
}
search(x+1,y,step+1);
}
}
int main (){
while (scanf("%d%d%d",&r,&w,&s)&&(r||w||s)){
for (int i=1;i<=r;i++){
scanf("%s",map[i]+1);
}
flag=0;
len=0;
search(1,s,0);
}
return 0;
}