poj 1573 Robot Motion(模拟题)

23 篇文章 0 订阅
15 篇文章 0 订阅

这一题还是模拟题,在oj出现错误,一直到现在才发现,是条件的判定顺序是错误的,应该判断是不是越界,再判定是不是访问过。~~~~~

传上来有乱码,这是原始代码 http://my.csdn.net/enigma_hao/code/detail/54876,有注释的,但跟跟正确代码有区别的,注释可以参考

#include <iostream>
#define MAX 13
using namespace std;
/*288K	0MS*/
typedef struct _position
{
    int x;
    int y;
}position;
 
//function 
 
position GetPos(char pa); 
int main()
{
    int row,col,enter;
    while(cin>>row>>col>>enter)
    {
       if(row==0&&col==0&&enter==0)  break;
       char a[MAX][MAX];
       int c[MAX][MAX];      //
       for(int i=0;i<row;i++)
         cin>>a[i];
        
      //?????
      memset(c,0,sizeof(c)); 
           
      int x,y;//?????????
      x=0;y=enter-1; 
       
      bool f1,f2;
      f1=f2=true;
      int counter=0;
      while(f1&&f2)
      {
       
         if(x<0||y<0||x>=row||y>=col)
         {
            f2=false;  //??????? 
            break;
         }
         
         if(c[x][y]!=0)
         {
            f1=false;  //???????? 
            break;
         } 
            
         char now=a[x][y];
         position p=GetPos(now);
          
         counter++;  //??? 
         c[x][y]=counter;
         //???????????????
         x+=p.x;
         y+=p.y;
         
      }
      if(!f2)
        cout<<counter<<" step(s) to exit"<<endl;
      else  if(!f1)
        cout<<c[x][y]-1<<" step(s) before a loop of "<<counter-c[x][y]+1<<" step(s)"<<endl;
    }
    system("pause");
    return 0;
}
 
position GetPos(char pa)
{
   position p;
   switch(pa)
   {
      case 'N':
           p.x=-1;p.y=0;
           break;
      case 'W':
           p.x=0;p.y=-1;
           break;
      case 'S':
           p.x=1;p.y=0;
           break;
      case 'E':
           p.x=0;p.y=1;
           break;
      default:
           break;
   }
    
   return p;
}

原始代码:

#include <iostream>
#define MAX 13
using namespace std;
 
typedef struct _position
{
    int x;
    int y;
}position;
 
//function 
 
position GetPos(char pa); 
int main()
{
    int row,col,enter;
    while(cin>>row>>col>>enter)
    {
       if(row==0&&col==0&&enter==0)  break;
       char a[MAX][MAX];
       int c[MAX][MAX];      //指的是当前位置第一次被访问,0代表是的没被访问 
       for(int i=0;i<row;i++)
         cin>>a[i];
        
      //初始化程序
      memset(c,0,sizeof(c)); 
           
      int x,y;//当前光标所在的位置
      x=0;y=enter-1; 
       
      bool f1,f2;
      f1=f2=true;
      int counter=0;
      while(f1&&f2)
      {
         if(c[x][y]!=0)
         {
            f1=false;  //代表第一种的错误 
            break;
         } 
          
         if(x<0||y<0||x>=row||y>=col)
         {
            f2=false;  //代表第二种错误 
            break;
         }
         
         char now=a[x][y];
         position p=GetPos(now);
          
         counter++;  //计数器 
         c[x][y]=counter;
         //改变当前的光标的横坐标和纵坐标
         x+=p.x;
         y+=p.y;
         
      }
      if(!f2)
        cout<<counter<<" step(s) to exit"<<endl;
      else  if(!f1)
        cout<<c[x][y]-1<<" step(s) before a loop of "<<counter-c[x][y]+1<<" step(s)"<<endl;
    }
    system("pause");
    return 0;
}
 
position GetPos(char pa)
{
   position p;
   switch(pa)
   {
      case 'N':
           p.x=-1;p.y=0;
           break;
      case 'W':
           p.x=0;p.y=-1;
           break;
      case 'S':
           p.x=1;p.y=0;
           break;
      case 'E':
           p.x=0;p.y=1;
           break;
      default:
           break;
   }
    
   return p;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值