1. 程式人生 > >hdu-2717(基礎搜索bfs)

hdu-2717(基礎搜索bfs)

pan push n-1 ostream nbsp 三個點 sin 兩種 入隊

題意:給你n和k,問你n最少花費多少代價能得到k;

有兩種變換:1、n++或者n--;

      2、n=n*2;

兩種代價每次的花費都是1;

思路:一維的bfs,每次入隊三個點,一個是n+1,一個是n-1,一個是n*2的點;

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define maxn 100020
using namespace std;
int step[maxn*2];
int visit[maxn*2];
int main()
{
    queue
<int>q; int n,k; while(cin>>n>>k) { if(n>k) cout<<n-k<<endl; else if(n==k) { cout<<"0\n"; } else { memset(visit,0,sizeof(visit)); memset(step,0,sizeof(step)); visit[n]
=1;step[n]=0;int flag=0; while(!q.empty()) { q.pop(); } q.push(n); while(!q.empty()) { int temp=q.front(); q.pop(); int now;//cout<<"z\n"; for(int
i=1;i<=3;i++) { if(i==1) now=temp+1; else if(i==2) now=temp-1; else now=temp*2; if(visit[now]==0&&now<=maxn&&now>=0) { q.push(now); step[now]=step[temp]+1; visit[now]=1; } if(now==k) { cout<<step[now]<<endl;flag=1; break; } } if(flag==1) break; } } } return 0; }

hdu-2717(基礎搜索bfs)