题目:
http://acm.hdu.edu.cn/showproblem.php?pid=2717
第一个数用3种方法(+1,-1,*2)到第二个数 最少步骤;
代码
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
struct node{
int x;
int step;
} ;
int s,e;
int use[100005];
int dfs(int x)
{
queue<node>q;
node tp,ans;
int tx;
ans.x=s;
ans.step=0;
use[x]=0;
q.push(ans);
while(!q.empty())
{
tp=q.front();
q.pop();
tx=tp.x+1;
if(tx<0||tx>100000)
;
else
{
if(use[tx])
{
use[tx]=0;
ans.x=tx;
ans.step=tp.step+1;
q.push(ans);
if(tx==e)
return ans.step;
}
}
tx=tp.x-1;
if(tx<0||tx>100000)
;
else
{
if(use[tx])
{
use[tx]=0;
ans.x=tx;
ans.step=tp.step+1;
q.push(ans);
if(tx==e)
return ans.step;
}
}
tx=tp.x*2;
if(tx<0||tx>100000)
;
else
{
if(use[tx])
{
use[tx]=0;
ans.x=tx;
ans.step=tp.step+1;
q.push(ans);
if(tx==e)
return ans.step;
}
}
}
}
int main()
{
while(cin>>s>>e)
{
if(s==e)
cout<<'0'<<endl;
else{
memset(use,1,sizeof(use));
cout<<dfs(s)<<endl;
}
}
return 0;
}