首页 > 其他 > 详细

P1588 [USACO07OPEN]Catch That Cow S

时间:2021-04-05 17:25:23      阅读:14      评论:0      收藏:0      [点我收藏+]

人生第一道做出来的BFS题,这道题很适合入门的BFS

个人解析

  通过这道题,我对BFS认识多点理解,

  BFS的过程其实可以看成一棵树,树的孩子就是我们采取的不同方式,本题就可以看成一棵三叉树

  注意边界情况,不要越界

  

 

#include<bits/stdc++.h>
using namespace std;
queue<int> q;//设置队列一定要设为全局变量
int dis[100000];//记录走到当前位置至少走了多少步
void bfs(int x,int y)
{
    while(!q.empty()){
        q.pop();//清空数组
    }
    q.push(x);
    memset(dis,100000,sizeof(dis));
    dis[x]=0;
    while(!q.empty()){
        x=q.front();//模板,接受值,弹出
        q.pop();
        if(x==y){
            cout<<dis[y]<<endl;
            break;
        }
        if(x+1<100000&&dis[x+1]==dis[0]){//第一个判断是否越界,第二个判断是否走过
            dis[x+1]=dis[x]+1;
            q.push(x+1);
        }
        if(x-1>0&&dis[x-1]==dis[0]){
            dis[x-1]=dis[x]+1;
            q.push(x-1);
        }
        if(x*2<100000&&dis[2*x]==dis[0]){
            dis[2*x]=dis[x]+1,
            q.push(x*2);
        }
    }
}
int main()
{
    int t;
    cin>>t;
    while(t--){
        int x,y;
        cin>>x>>y;
        bfs(x,y);
    }
    return 0;
}

 

P1588 [USACO07OPEN]Catch That Cow S

原文:https://www.cnblogs.com/lvjt0208/p/14618542.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!