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;
}
posted @ 2013-11-19 22:08  单调的幸福  阅读(144)  评论(0编辑  收藏  举报