poj1573

来源:互联网 发布:硬盘初始化 数据错误 编辑:程序博客网 时间:2024/05/21 11:29

题目大意:

给一个矩阵的行数和列数,然后给出机器人所在的位置,按照N,S,E,W四个方向走,问最后是走出矩阵还是进入循环。

解题思路:

用个数组记录该位置是否已经走过,然后按照提示走就可以了

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(){  int r,c,s;  int i,j,count,mark,flag;  char ch[15][15];  int vis[15][15];  while(scanf("%d%d%d",&r,&c,&s)!=EOF)  {    flag=0;    memset(vis,0,sizeof(vis));    if(r==0&&c==0&&s==0)    {      break;    }    for(i=1;i<=r;i++)    {      getchar();      ch[i][0]='e';      for(j=1;j<=c;j++)      {        scanf("%c",&ch[i][j]);      }      ch[i][c+1]='e';    }    for(i=0;i<=c+1;i++)    {      ch[0][i]='e';    }    for(i=0;i<=c+1;i++)    {      ch[r+1][i]='e';    }    i=1;j=s;    count=1;    while(ch[i][j]!='e')    {      if(ch[i][j]=='W')      {        vis[i][j]=count;        i=i;j=j-1;        if(vis[i][j])        {          mark=count+1-vis[i][j];          flag=1;          break;        }        else        {          count++;        }      }      else if(ch[i][j]=='E')      {        vis[i][j]=count;        i=i;j=j+1;        if(vis[i][j])        {          mark=count+1-vis[i][j];          flag=1;          break;        }        else        {          count++;        }      }      else if(ch[i][j]=='N')      {        vis[i][j]=count;        i=i-1;j=j;        if(vis[i][j])        {          mark=count+1-vis[i][j];          flag=1;          break;        }        else        {          count++;        }      }      else if(ch[i][j]=='S')      {        vis[i][j]=count;        i=i+1;j=j;        if(vis[i][j])        {          mark=count+1-vis[i][j];          flag=1;          break;        }        else        {          count++;        }      }    }    if(flag)    {      printf("%d step(s) before a loop of %d step(s)\n",vis[i][j]-1,mark);    }    else    {      printf("%d step(s) to exit\n",count-1);    }  }  return 0;}
0 0
原创粉丝点击