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

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;
}

你可能感兴趣的:(POJ 3278 && HDU 2717 Catch That Cow(bfs))