您的位置:首页 > 其它

poj 1573 Robot Motion

2013-07-31 19:57 357 查看
题目:http://poj.org/problem?id=1573

题意:已知坐标系大小,和初始的最上面的位置,根据命令求是否能出去,或者一直循环

这就是我建的系,画的有点难看哈!



#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
char map[500][500];
int vis[500][500];

int dx[5]={0,0,-1,1};//分别代表N,S,W,E
int dy[5]={1,-1,0,0};
int main()
{
int i,j,a,b,t,f,sum,x;
while(cin>>a>>b>>t&&(a!=0||b!=0||t!=0))
{
sum=0;
memset(vis,0,sizeof(vis));
for(j=a; j>=1; j--)
{
for(i=1; i<=b; i++)
cin>>map[i][j];
}
i = t; j = a;
while(1)
{
sum++;
vis[i][j]=sum;
if(map[i][j]=='N') {i+=dx[0]; j+=dy[0];}
else if(map[i][j]=='S') {i+=dx[1]; j+=dy[1];}
else if(map[i][j]=='W') {i+=dx[2]; j+=dy[2];}
else if(map[i][j]=='E') {i+=dx[3]; j+=dy[3];}
if(vis[i][j])
{
f=1;
x=vis[i][j];
break;
}
if(i>b||j>a || i<=0 ||j<=0)
{
f=2;
break;
}
}
if(f==2)
{
printf("%d step(s) to exit\n",sum);
}
else
{
printf("%d step",x-1);
printf("(s)");
printf(" before a loop of %d step",sum-x+1);
printf("(s)");
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: