大意:在x轴上可以走到x-1或x+1或2*x的位置,给出起点位置和目标位置,求最小步数。
分析:BFS水题。
代码:
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<cmath> #include<cstring> using namespace std; int num[100005]; int bfs(int x,int y) { queue<int>q; while(!q.empty()) q.pop(); q.push(x); num[x]=1; while(!q.empty()) { if(q.front()==y) return num[y]; int m=q.front()+1; if(m>=0&&m<=100000) if(!num[m]) { q.push(m); num[m]=num[q.front()]+1; } int n=q.front()-1; if(n>=0&&n<=100000) if(!num[n]) { q.push(n); num[n]=num[q.front()]+1; } int t=2*q.front(); if(t>=0&&t<=100000) if(!num[t]) { q.push(t); num[t]=num[q.front()]+1; } q.pop(); } } int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) { memset(num,0,sizeof(num)); printf("%d ",bfs(n,k)-1); } return 0; }