zoj 1708 Robot Motion(简单)

 

题意:

 

根据给出的矩阵中的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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值