/**
广搜,有两点剪枝
1、当人在牛右边时(i>K),只要-1
2、广搜过程不会超过边界100000
2i超过边界的不可能是最优解
设边界为2k,假设2i>2k,则2i-2k>=2,到达2k花费时间为2i-2k+1>=3
而先-1再乘2,到达2k花费时间为(i-k)*2
*/
#include<stdio.h>
#include<queue>
#include<string.h>
#define MAX 150000
using namespace std;
int count[MAX];
int main()
{
int i,N,K,min;
queue<int> qu;
scanf("%d %d",&N,&K);
if(K<=N){
printf("%d\n",N-K);
return 0;
}
for(i=0;i<MAX; ++i)
{
count[i]=-1;
}
qu.push(N);
count[N]=0;
while(!qu.empty())
{
i = qu.front();
qu.pop();
if(i==K)break;
if(i<K)//剪枝,当i>k时候,只有-1才能到达
{
/*
* 2i超过边界的不可能是最优解
* 设边界为2k,假设2i>2k,则2i-2k>=2,到达2k花费时间为2i-2k+1>=3
* 而先-1再乘2,到达2k花费时间为(i-k)*2
*/
if(i*2<MAX && count[i*2]==-1)
{
qu.push(i*2);
count[i*2] = count[i]+1;
}
if(count[i+1]==-1)
{
qu.push(i+1);
count[i+1] = count[i]+1;
}
}
if(i-1>=0 && count[i-1]==-1)
{
qu.push(i-1);
count[i-1] = count[i]+1;
}
}
printf("%d\n",count[K]);
return 0;
}
分享到:
相关推荐
北大POJ3278-Catch That Cow 解题报告+AC代码
北大POJ初级-简单搜索 解题报告+AC代码
简单搜索题 数独 答案 POJ 2676 也可以没事玩玩数独。
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
NULL 博文链接:https://128kj.iteye.com/blog/1703983
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
poj分类poj分类poj分类poj分类
北大POJ1159-Palindrome 解题报告+AC代码
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
北大POJ1184-Smart typist【搜索与状态压缩】 解题报告+AC代码
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
POJ题目及算法,包括动态规划、深搜广搜等算法。含相关注释。
POJ1083的代码,POJ1083的代码,POJ1083的代码
北大POJ中级搜索全部练习【解题报告+AC代码】
poj 百练 题目分类 poj 百练 题目分类