您的位置:首页 > 其它

POJ 3278 && HDU 2717 Catch That Cow(bfs)

2015-07-13 10:36 423 查看
Description

给定两个整数n和k,通过 n+1或n-1或n*2 这3种操作,使得n=k,输出最少的操作次数(0≤n≤100,000)

Input

两个整数n和k

Output

输出最少操作次数

Sample Input

5 17

Sample Output

4

Solution

简单bfs

Code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
queue<int> que;
int n,k;
int dis[100005];
bool vis[100005];//标记数组
int main()
{
scanf("%d%d",&n,&k);
que.push(n);//起点入队
memset(vis,false,sizeof(vis));//初始化
memset(dis,false,sizeof(dis));//初始化
while(!que.empty())
{
int x=que.front();
que.pop();
if(x==k)//到达终点
{
printf("%d\n",dis[x]);
break;
}
if(x-1>=0&&!vis[x-1])//不能超出区域
{
vis[x-1]=true;//标记该点
que.push(x-1);//入队
dis[x-1]=dis[x]+1;//操作数加一
}
if(x+1<=100000&&!vis[x+1])//不能超出区域
{
vis[x+1]=true;//标记该点
que.push(x+1);//入队
dis[x+1]=dis[x]+1;//操作数加一
}
if(2*x<=100000&&!vis[x<<1])//不能超出区域
{
vis[x<<1]=true;//标记该点
que.push(x<<1);//入队
dis[x<<1]=dis[x]+1;//操作数加一
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: