hdu 3278

#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
using namespace std;
int a,b,used[200020];
queue<int>q;
int ok(int n)
{ 
       if(n < 200000&&n >= 0&&used[n]==0)  return 1; 
              return 0;
              }
              
 void bfs()
{        int n;  
      while(!q.empty()) 
             { 
                    //      cout<<q.front()<<endl;  
                                  if(q.front() == b) return ; 
                                                 n = q.front() - 1; 
    if(ok(n)){used[n] = used[q.front()]+1;q.push(n);}     
               n = q.front() + 1;  
  if(ok(n)){used[n] = used[q.front()]+1;q.push(n);
  }                n = q.front()*2; 
                 if(ok(n)){used[n] = used[q.front()]+1;q.push(n);
                 }                q.pop();        
                 }
                 }
                 
                 int main()
                 {     
                    while(cin>>a>>b)   
                         {             
                            memset(used,0,sizeof(used));          
                                  q.push(a);                used[a] = 1;       
                                           bfs();           
                                                cout<<used[b]-1<<endl;        
                                                        while(!q.empty())       
                                                                 {              
                                                                           q.pop();      
                                                                                     }  
                                                                                       
                                                                                           }  
                                                                                                 return 0;      
                                                                                                          }
View Code

 

#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
using namespace std;
int a,b,used[200020];
queue<int>q;
int ok(int n)
{
       if(n < 200000&&n >= 0&&used[n]==0)  return 1;
           return 0;
     }
    
 void bfs()
{        int n; 
      while(!q.empty())
          {
           //      cout<<q.front()<<endl; 
                   if(q.front() == b) return ;
                         n = q.front() - 1;
 if(ok(n)){used[n] = used[q.front()]+1;q.push(n);}    
            n = q.front() + 1; 
  if(ok(n)){used[n] = used[q.front()]+1;q.push(n);
  }                n = q.front()*2;
                 if(ok(n)){used[n] = used[q.front()]+1;q.push(n);
     }                q.pop();       
     }
     }
    
     int main()
     {    
        while(cin>>a>>b)  
          {            
          memset(used,0,sizeof(used));         
             q.push(a);                used[a] = 1;      
                   bfs();          
                  cout<<used[b]-1<<endl;       
                    while(!q.empty())      
                       {             
                           q.pop();     
                               } 
                       
                            } 
                               return 0;     
                                  }


 

转载于:https://www.cnblogs.com/2014acm/p/3902349.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值