POJ 3278 Catch That Cow

2019-08-16 07:44:28来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

POJ 3278 Catch That Cow

目录

  • 题目&题意
  • 思路
  • $Code$

题目&题意


给你$n,m$。
可以进行的操作有:
1.$n + 1$
2.$n - 1$
3.$n * 2$
问最少几步$n==m$。
有好几组数据(被坑了,$qwq$)。

思路

$bfs$

$Code$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;
int n,m,step[100001];
queue<int> q;
bool pd[1000001];
inline int read(){
    int x=0;bool f=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return f?-x:x;
}
bool bound(int x){
    if(x<0||x>100000||pd[x]) return true;
    return false;
}
void bfs(){
    int t,temp;
    q.push(n);
    pd[n]=1;
    while(!q.empty()){
        t=q.front();
        q.pop();
        for(int i=1;i<=3;++i){
            if(i==1) temp=t+1;
            if(i==2) temp=t-1;
            if(i==3) temp=t*2;
            if(bound(temp)) continue;
            step[temp]=step[t]+1;
            if(temp==m) printf("%d\n",step[temp]);
            q.push(temp);
            pd[temp]=1;
        }
    }
}

int main(){
    n=read(),m=read();
    if(n>=m) printf("%d\n",n-m);//这个判断一定不要忘记
    else bfs();
    memset(pd,0,sizeof(pd));
    return 0;
}

原文链接:https://www.cnblogs.com/poi-bolg-poi/p/11128779.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:2019.07.05 纪中_B

下一篇:usb口打印机的指令打印和驱动打印