麻煩大神幫忙看看。。
#include<queue>
#include<iostream>
#include<algorithm>
using namespace std;
__int64 a[100010],n,k;
int i,j;
struct node{
__int64 x;
int s;//x記錄位置,s記錄步數
};
int bfs()
{
node m,next;
queue<node> q;
m.x=n;
m.s=0;
a[n]=1;
q.push(m);//入堆疊
while(!q.empty())
{
m=q.front();
q.pop();
for(i=0;i<3;i++)
{
if(i==0)
{
next.x=m.x*2;
next.s=m.s+1;
}
if(i==1)
{
next.x=m.x+1;
next.s=m.s+1;
}
if(i==2)
{
next.x=m.x-1;
next.s=m.s+1;
}
if(next.x<0||next.x>k)
continue;
if(a[next.x]!=1)
{
if(next.x==k)
return next.s;
q.push(next);
a[next.x]=1;
}
}
}
}
int main()
{
while(scanf("%I64d %I64d",&n,&k)!=EOF)
{memset(a,0,sizeof(a));
int sum;
sum=bfs();
if(n>=k) printf("%I64d\n",n-k);
else cout<<sum<<endl;}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/19185.html
標籤:C++ 語言
上一篇:c語言關于float問題
下一篇:奇葩錯誤
