洛谷 P1588 丢失的牛

洛谷 P1588 丢失的牛

传送门:洛谷 P1588 丢失的牛

懒得再解释了,简单bfs,下面是蒟蒻代码:

#include<bits/stdc++.h>//万能头
using namespace std;
int i,j,k,m,n,f[200005];
queue<int>q;//队列
int main()
{   scanf("%d%d",&n,&m);
    if(m<=n){//特判,如果奶牛在FJ之后,FJ只能往后走
        printf("%d",n-m);//距离即步数
        return 0;
    }
    for(i=0;i<=m*2;i++)//避免*2后的爆炸
        f[i]=-1;//记录没有到达过
    q.push(n),f[n]=0;//队列中压入n,并将到达n的步数设置为0
    while(!q.empty()){//队列不空不罢休
        int x=q.front();//x为队列第一个数
        q.pop();//弹出队列第一个数
        if(x==m){//到达目标
            printf("%d",f[x]);
            return 0;
        }
        if(x*2<=200000&&f[x*2]==-1)//没有越界且没有到达过
            q.push(x*2),f[x*2]=f[x]+1;//压入,标记步数
        if(x+1<=200000&&f[x+1]==-1)//没有越界且没有到达过
            q.push(x+1),f[x+1]=f[x]+1;//压入,标记步数
        if(x-1>0&&f[x-1]==-1)//没有越界且没有到达过
            q.push(x-1),f[x-1]=f[x]+1;//压入,标记步数
    }
    return 0;//好孩子不忘return 0
}

猜你喜欢

转载自blog.csdn.net/time_h/article/details/81675220
今日推荐