您的位置:首页 > 其它

Poj 1573 Robot Motion

2010-09-04 14:14 387 查看
顺着搜就行了。

 

#include<cstdio>
#include<cstring>
using namespace std;
int r,c,sta;
char gra[15][15];
int s[15][15];
bool check(int x,int y)
{
if (x>=0&&x<r&&y>=0&&y<c)
return 1;
return 0;
}
bool Search(int &step,int &loop)
{
int i,j,x,y,dx,dy,cnt=0;
memset(s,-1,sizeof(s));
x=0,y=sta-1;
s[x][y]=0;
while (check(x,y)){
switch(gra[x][y]){
case 'N':
dy=y,dx=x-1;
break;
case 'E':
dx=x,dy=y+1;
break;
case 'W':
dx=x,dy=y-1;
break;
case 'S':
dy=y,dx=x+1;
break;
}
if (!check(dx,dy))
break;
if (s[dx][dy]<0)
s[dx][dy]=++cnt;
else {
loop=cnt-s[dx][dy]+1;
step=s[dx][dy];
return 0;
}
x=dx,y=dy;
}
step=cnt+1;
return 1;
}
int main()
{
int i,a,b;
while (scanf("%d%d%d",&r,&c,&sta)&&(r+c+sta)){
for (int i=0;i<r;i++)
scanf("%s",gra[i]);
a=b=0;
if (Search(a,b))
printf("%d step(s) to exit/n",a);
else
printf("%d step(s) before a loop of %d step(s)/n",a,b);
}
return 0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  search c