简单的暴力bfs搜索
#include<bits/stdc++.h> using namespace std; const int maxN=100005; int cnt[maxN]; int bfs(int s,int e){ for(int i=0;i<maxN;i++)cnt[i]=maxN; cnt[s]=0; queue<int> q; int u; q.push(s); while(!q.empty()){ u=q.front(); q.pop(); if(u==e)return cnt[u]; if(u>0&&cnt[u-1]>cnt[u]+1){ q.push(u-1); cnt[u-1]=cnt[u]+1; } if(u<100000&&cnt[u+1]>cnt[u]+1){ q.push(u+1); cnt[u+1]=cnt[u]+1; } if(u<=50000&&cnt[u*2]>cnt[u]+1){ q.push(u*2); cnt[u*2]=cnt[u]+1; } } return -1; } int main(){ int n,k; cin>>n>>k; cout<<bfs(n,k); }