Catch That Cow

这道题wa了首先是RE,因为数组下标没有有负的,其次是wa,wa了好几次,我就耐闷了,原来题目要求我输出最小的时间,还有当N>M时。。

#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
int N,M,visit[1000010],dp[1000010];
const int inf=0x7fffffff;
int main()
{
   while(scanf("%d%d",&N,&M)!=EOF)
   {
    int i,j,x,t,max=inf;
     if(N>M)
        {
        printf("%d\n",N-M);
        continue;
        }
    memset(visit,0,sizeof(visit));
    memset(dp,0,sizeof(dp));
    queue<int>q;
    q.push(N);
    x=N;
    while(!q.empty())
    { 
      x=q.front();
      if(x==M)
      {
      if(dp[x]<max)
      max=dp[x];
      visit[x]=0;
      }
      q.pop();
      t=x-1;
      if(!visit[t]&&t>=0&&t<=M+2)
      {
      //if(!(t*2<=M&&(t+2)*2<=M))
      q.push(t);visit[t]=1;dp[t]=dp[x]+1; 
      }
      t=x+1;
      if(!visit[t]&&t>=0&&t<=M+2)
      {
      q.push(t);
      visit[t]=1;
      dp[t]=dp[x]+1;
      }
      
      t=2*x;
      if(!visit[t]&&t>=0&&t<=M+2)
      {
       q.push(t);
       visit[t]=1;
       dp[t]=dp[x]+1;
      }
   }
      
     
    printf("%d\n",max);

    
}
return 0;
}      
      
     
     
    
    
    

posted on 2011-05-08 21:04  more think, more gains  阅读(216)  评论(0编辑  收藏  举报

导航