zoj 1708 Robot Motion(简单)

来源:互联网 发布:知乎中国相控阵雷达 编辑:程序博客网 时间:2024/05/16 18:50
 

题意:

 

根据给出的矩阵中的NEWE判断走向,若能走出则输出

10 step(s) to exit
若不能走出则输出

3 step(s) before a loop of 8 step(s)

 

分析:

水题,但很像这几天做的dfs,只是形式==b.浪费了我好长时间调试,还写的特挫。

遇到的问题:

1.       初始化边界搞了一会儿,发现行列弄错了。。。囧//

2.       设置标记数组时,问题爆了很多,最后发现要避免path=2又被path=1覆盖为1.

哎,设了很多标记,可读性就变弱了。>,<….

#include <stdio.h>#include <string.h>int  main(){       int row,col,start;       int i,j,x,y,path[15][15],count,flag,ff,f1;       char a[15][15];       while(scanf("%d%d%d",&row,&col,&start)!=EOF)       {              count=0;              ff=0;              f1=0;              flag=0;              for(i=0;i<15;i++)                     for(j=0;j<15;j++)                            path[i][j]=0;              if(row==0&&col==0&&start==0) break;              for(i=1;i<=row;i++)              {                          scanf("%s",&a[i][1]);              }              for(i=0;i<row+2;i++)              {                     a[i][0]='0';                     a[i][col+1]='0';              }              //a[i][0]='\0';              for(i=0;i<col+2;i++)              {                     a[0][i]='0';                     a[row+1][i]='0';              }              //a[0][i]='\0';              x=1;              y=start;              while(1)              {                     if(path[x][y]!=2)                     path[x][y]=1;//怎样避免path=2又被覆盖为1。                     if(a[x][y]=='0') break;                     if(path[x][y]==2&&f1==1) break;                     else if(path[x][y]==2) f1=1;                     if(a[x][y]=='N')                     {                            x--;count++;                     }                     else if(a[x][y]=='S')                     {                            x++;count++;                     }                     else if(a[x][y]=='E')                     {                            y++;count++;                     }                     else if(a[x][y]=='W')                     {                            y--;count++;                     }                     if(path[x][y]==1)                     {                            flag++;                            if(ff==0)                            {                                   ff=1;                                   path[x][y]=2;                            }                     }              }              if(flag==0)              printf("%d step(s) to exit\n",count);              else                      printf("%d step(s) before a loop of %d step(s)\n",count-2*flag,flag);       }       return 0;}

原创粉丝点击