这道题目怎么做?求算法!

猎豹和野猪在同一条直线上,他们的坐标分别是x和y,x是小于等于y的。现在猎豹有两种跑法:1.跑动一格,就是从x到x+1或者x-1;2.跑动一倍,就是从x到2*x。现在请你... 猎豹和野猪在同一条直线上,他们的坐标分别是 x 和 y,x 是小于等于 y的。
现在猎豹有两种跑法:
1.跑动一格,就是从 x 到x+1 或者x-1;
2.跑动一倍,就是从 x 到2*x。
现在请你找出最少要几步捉到野猪。
数据输入
输入第 1 行给出两个正整数 x、y(0<x<=y<=100000),分别表示猎豹的坐标和野猪的坐标。
数据输出
输出只有 1行,给出最少步数。
例:5 17
4
展开
 我来答
a2329451
2010-11-04 · 超过14用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
思想:每一步都比较两种跑法那一种更接近目标,用一个自增计数器计算步数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
11111
2024-11-15 广告
作业指导书是一种专门编写的指导性文件,用于完成某一项或同一类型的工作。它是根据设计图纸、制造厂说明书、相关的验评标准、编写人员现场所积累的施工经验以及成熟实用的施工工艺所编写的。定义和作用作业指导书是质量管理体系文件的组成部分,主要用于阐明... 点击进入详情页
本回答由11111提供
Magic347
2010-11-03 · 超过13用户采纳过TA的回答
知道答主
回答量:168
采纳率:0%
帮助的人:292万
展开全部
算法思想:

该题为典型的宽度优先搜索。

具体来说,就是不断把当前猎豹可能到达的所有坐标节点压入到一个队列中,在每一次压入队列操作完毕后,立即寻找队列中所有的坐标是否已经覆盖到野猪所在的坐标,也就是目标节点,如果找到了的话就证明找到了一种最短的走法,否则将当前节点弹出队列并压入后继节点,依次往复。

此外,利用一个计数器来记录走过的步数,以及为了优化搜索效率,需要对之前访问过的坐标节点作标记,以后都不必重复压入到队列中。

#include<iostream>
#include<queue>
using namespace std;

const int MAXN=100000;

bool visited[MAXN+1];
int n,k;
int Bfs()
{

if( n==k ) return 0;

memset( visited,false,sizeof(visited) );
visited[n]=true;

queue<int> Q;
Q.push( n );

int cP;
int nNode=1;
int move=0;

while( 1 ){
move++;
for( int i=0 ; i<nNode ; i++ ){
cP=Q.front();
Q.pop();
if( cP-1>=0&&!visited[cP-1] ){
if( cP-1==k )
return move;

visited[cP-1]=true;
Q.push( cP-1 );
}
if( cP+1<=MAXN&&!visited[cP+1] ){
if( cP+1==k )
return move;

visited[cP+1]=true;
Q.push( cP+1 );
}
if( 2*cP<=MAXN&&!visited[2*cP] ){
if( 2*cP==k )
return move;

visited[2*cP]=true;
Q.push( 2*cP );
}
}

//debug here , size is chaging , not 3^j
nNode=Q.size();

}

}

int main()
{
while( cin>>n>>k ){

cout<<Bfs()<<endl;

}
return 0;

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菜花啊菜花
2010-11-03 · 超过35用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:62.5万
展开全部
这个题不难,自己写吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式