Catch that cow(bfs)
#include <stdio.h> #include <string.h> #include <queue> using namespace std; int vis[100005]={0},n,k,t; int main() { queue <int> Q; scanf("%d%d",&n,&k); Q.push(n); while(!Q.empty()) { t=Q.front(); Q.pop(); if (t==k) break; //第一个达k的肯定是最快的,直接跳出循环输出即可 if (t>0 && !vis[t-1]) //三种情况每一种都遍历;已经被访问过的节点说明比当前方法快,不允许修改 {Q.push(t-1);vis[t-1]=vis[t]+1;} if (t<k && !vis[t+1]) {Q.push(t+1);vis[t+1]=vis[t]+1;} if (t*2<100005 && !vis[t*2]) {Q.push(t*2);vis[t*2]=vis[t]+1;} } printf("%d\n",vis[k]); return 0; }