题目:

题目大意:

输入n和k表示农夫和牛的位置,n和k在区间【0,100000】间
农夫有三种方式进行移动,每种方式需要的时间相同,都是一分钟
1.向前移动一米(+1)
2.向后移动一米(-1)
3.移动到2*n(移动到二倍农夫当前米数)
牛不动
求农夫走到牛所在位置的最短时间(分钟)并输出。

代码:

#include <cstdio>
#include<queue>
#include<cstring>
#define position 100005
using namespace std;
int n,k;
struct num//定义结构体表示每一个位置
{int x;//位置坐标int step;//走到这一步的步数(我们将时间转换为步数理解,每一步需要一分钟)
};
bool visit[position];//标记,判断是否走过
void bfs()
{queue<num> steps;//定义队列存储位置//BFS是宽度优先,有时候需要队列(先进先出)num start,now,next;//start表示起点,now表示当前的位置,next表示下一步的位置memset(visit,false,sizeof(visit));//初始化标记(都为false表示未走过)start.x=n;//初始化起点start.step=0;steps.push(start);//起点入队visit[start.x]=true;//标记起点(表示走过)while(!steps.empty()){now=steps.front();//取队列首元素表示当前位置steps.pop();//首元素出列if(now.x==k)//如果当前位置就是牛的位置(得到结果)输出步数,退出调用函数{printf("%d\n",now.step);return;}for(int i=0;i<3;i++)//对三种走的方式分别进行尝试{if(i==0)next.x=now.x+1;else if(i==1)next.x=now.x-1;else if(i==2)next.x=now.x*2;if(next.x>=0&&next.x<position&&!visit[next.x])//如果在位置范围内(0~100000)且未被标记(未走过)//假如被标记则代表前面用了更少的步数到达这一点,根据题目要求求最少的步数(时间),所以不需要进行这一步了{visit[next.x]=true;//标记这个位置(表示走过了)next.step=now.step+1;//步数加一steps.push(next);//入队}}}
}
int main()
{scanf("%d %d",&n,&k);bfs();return 0;
}

Catch That Cow(农夫和牛)(BFS入门)(详解)相关推荐

  1. Spring入门详解

    typora-copy-images-to: upload Spring入门详解 Spring框架是Java开发中最常用的框架,功能非常强大 源码下载:Spring Framework jar包.文档 ...

  2. C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3

    C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...

  3. C#语言入门详解笔记(9)—P19 委托详解

    C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...

  4. FFmpeg入门详解之82:FFmpeg转码器Java版之ava编码

    创建数据库:db_webavtc 创建数据表:avcategory(素材类别) id int primary key, pid int , cname varchar(255), cmemo varc ...

  5. linux 日志按大小切割_nginx入门详解(六)- 日志切割

    上一章讲解了nginx的目录加密功能,本章重点介绍nginx的日志切割. 笨办法学linux:nginx入门详解(五)- 目录加密​zhuanlan.zhihu.com 在第二章,我们探讨了nginx ...

  6. python怎么安装myqr模块-python二维码操作:对QRCode和MyQR入门详解

    python是所有编程语言中模块最丰富的 生活中常见的二维码功能在使用python第三方库来生成十分容易 三个大矩形是定位图案,用于标记二维码的大小.这三个定位图案有白边,通过这三个矩形就可以标识一个 ...

  7. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

  8. python语言入门m-Python语言入门详解!快速学成Python!

    今日主题 "Python语言入门详解" 近两年来,Python语言借着数据科学和人工智能的"东风"成为了最流行的编程语言--街头巷尾人们口口相传.同时,Pyth ...

  9. python语言入门详解-python初级教程:入门详解

    python初级教程:入门详解 Crifan Li 目录 前言 .................................................................... ...

  10. 【GCN】图卷积网络(GCN)入门详解

    机器学习算法与自然语言处理出品 @公众号原创专栏作者 Don.hub 单位 | 京东算法工程师 学校 | 帝国理工大学 图卷积网络(GCN)入门详解 什么是GCN GCN 概述 模型定义 数学推导 G ...

最新文章

  1. PHP iconv()函数转字符编码的问题(转)
  2. 如何在推送后压缩git中的提交?
  3. C语言 匿名联合体和匿名结构体
  4. 获取本机主机名称和IP地址
  5. 字符缓冲流特有功能复制Java文件
  6. java ee的小程序_在Java EE应用程序中实现自动重试
  7. 用Blink打造你的技术朋友圈
  8. 你是如何离编程越来越远的?
  9. 杭电多校HDU 6579 Operation (线性基 区间最大)题解
  10. 美图秀秀怎么去水印-美图秀秀怎么去水印图片教程
  11. vue安装axios以及如何使用axios
  12. Mac 怎样安装虚拟机(VMware fusion 12)
  13. 为什么使用VO,DTO,BO
  14. Excel怎么实现图片查找功能?
  15. 20210429 ---- 浅谈 视口
  16. Android Lost RAM的统计方法
  17. 百度又一神器发布!网友:牛逼炸了...
  18. 计算机开不了机反复重启,电脑一直反复重启,就是开不了机,怎么处理
  19. 【树莓派C语言开发】实验03:七彩LED模块
  20. catia参数化建模时在结构树中不显示参数信息

热门文章

  1. 基于Android的网络菜谱app,基于Android平台的菜谱实现
  2. 大话3G——手机大佬“摩托罗拉”兴衰史
  3. 中望CAD的lisp编辑器_CAD应用技巧:中望CAD中加载LISP程序
  4. 一次帮用户解决源码被敲诈事件
  5. matlab实现ofdm调制解调,基于MATLAB的OFDM调制解调仿真
  6. DAMA数据治理学习笔记-大数据和数据科学
  7. (绝对详细)CenterNet训练自己的数据(pytorch0.4.1)
  8. 电动车辆复合电源模型-matlab仿真模型
  9. 数据结构基础篇-链表反转(非递归与递归)C++实现
  10. polygenic risk score:多基因风险评分