poj 1573

来源:互联网 发布:telnet 1521端口不通 编辑:程序博客网 时间:2024/05/23 15:50
#include <iostream>#include<cstdio>using namespace std;const int maxn=10+5;typedef pair<int,int>PII;const char *symbol="NSWE";int ans;char maze[maxn][maxn];PII record[200];int loop;int row,colu,pos;bool crash(int nx,int ny){    if(nx<0||nx>=row||ny<0||ny>=colu) return false;    for(int i=0;i<ans;i++)         if(nx==record[i].first&&ny==record[i].second) {                                                                                   loop=i;                                                                                   return false;                                                                                  }    return true;}bool Move(int nx,int ny,int k){    if(k==0) nx--;    else if(k==1) nx++;            else if(k==2) ny--;                    else if(k==3) ny++;    bool t=crash(nx,ny);    if(!t) return false;    record[ans++]=PII(nx,ny);    return true;}int main(){    while(scanf("%d%d%d",&row,&colu,&pos)==3)    {         if(row==0&&colu==0&&pos==0) break;        loop=-1;        ans=0;        if(row==0||row==0) printf("0 step(s) to exit\n");        else {              for(int i=0;i<200;i++)                  record[i]=PII(0,0);              for(int i=0;i<row;i++)                  scanf("%s",&maze[i]);              record[ans++]=PII(0,pos-1);              for(;;)                {                 bool cnt;                 for(int i=0;i<4;i++)                     if(maze[record[ans-1].first][record[ans-1].second]==symbol[i]) {                                                                                                                     cnt=Move(record[ans-1].first,record[ans-1].second,i);                                                                                                                     break;                                                                                                                       }               if(!cnt) break;                }              if(loop==-1) printf("%d step(s) to exit\n",ans);              else printf("%d step(s) before a loop of %d step(s)\n",loop,ans-loop);              }    }    return 0;}
原创粉丝点击