poj 1573Robot Motion

9704 ワード

http://poj.org/problem?id=1573

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 #define maxn 500

 5 using namespace std;

 6 char g[maxn][maxn];

 7 int r,l,st;

 8 int vis[maxn][maxn];

 9 int main()

10 {

11     while(scanf("%d%d%d",&r,&l,&st)!=EOF)

12     {

13         if(r==0&&l==0&&st==0) break;

14         for(int i=0; i<r; i++)

15         {

16             scanf("%s",g[i]);

17         }

18         int si=0,sj=st-1;

19         int step=1,step1;

20         bool flag=false;

21         memset(vis,0,sizeof(vis));

22         while(1)

23         {

24             if(vis[si][sj])

25             {

26                 flag=true;

27                 step1=step-vis[si][sj];

28                 break;

29             }

30             if((g[si][sj]=='W'&&sj==0)||(g[si][sj]=='E'&&sj==l-1)||(g[si][sj]=='S'&&si==r-1)||(g[si][sj]=='N'&&si==0)) break;

31             vis[si][sj]=step;

32             if(g[si][sj]=='W')

33             {

34                 sj--;

35             }

36             else if(g[si][sj]=='E')

37             {

38                 sj++;

39             }

40             else if(g[si][sj]=='S')

41             {

42                 si++;

43             }

44             else if(g[si][sj]=='N')

45             {

46                 si--;

47             }

48             step++;

49         }

50         if(flag)

51         {

52             //printf("%d %d
",si,sj);
53 printf("%d step(s) before a loop of %d step(s)
",vis[si][sj]-1,step1); 54 } 55 else 56 printf("%d step(s) to exit
",step); 57 } 58 return 0; 59 }

View Code