设为首页 加入收藏

TOP

OpenJudge 4001:抓住那头牛
2019-03-23 22:07:58 】 浏览:153
Tags:OpenJudge 4001: 抓住 头牛

题目链接

题解:

这个题可以用广搜来解决,从农夫到牛的走法每次都有三种选择,定义一个队列,把农夫的节点加进队列,然后以这三种走法找牛,队列先进先出,按顺序直到找到牛的位置。

代码:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<cstring>
using namespace std;
int n,k;
#define MAX 1e5
const int MAX_N=1e5+5;
int vist[MAX_N];
struct step
{
    int x,sts;
    step(int xx,int s):x(xx),sts(s){}   //构造函数,但是有自定义构造函数以后,默认的构造函数不再起作用,所以如果有不赋初值的参数,需要再定义一个空构造函数 
    step(){}    //空构造函数 
};
queue<step> q;
int main()
{
    scanf("%d%d",&n,&k);
    memset(vist,0,sizeof(vist));
    q.push(step(n,0));   
    vist[n]=1;
    while(!q.empty()){
        step s=q.front();
        if(s.x==k){               //找到牛所在的位置 
            printf("%d\n",s.sts);
            break;
        }
        else{                           //三种情况 
            if(s.x-1>=0&&!vist[s.x-1]){        
                q.push(step(s.x-1,s.sts+1));
                vist[s.x-1]=1;
            }
            if(s.x+1<=MAX&&!vist[s.x+1]){
                q.push(step(s.x+1,s.sts+1));
                vist[s.x+1]=1;
            }
            if(s.x*2<=MAX&&!vist[s.x*2]){
                q.push(step(s.x*2,s.sts+1));
                vist[s.x*2]=1;
            }   
        }
        q.pop();                //把走过的点走从队列里删掉 
    }
    return 0;
} 
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇#leetcode刷题之路32-最长有效括号 下一篇C++(初学讲解):判断倍数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目