poj4001:抓住那头牛(BFS)
描述
农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1、从X移动到X-1或X+1,每次移动花费一分钟
2、从X移动到2*X,每次移动花费一分钟
假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛?
输入
两个整数,N和K
输出
一个整数,农夫抓到牛所要花费的最小分钟数
样例输入
5 17
样例输出
4
坑点在于判断越界和数组开大点
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
const int maxsize = 100000;
const int MaxN = 1000000;
struct Step{int x;int step;Step(int xx,int s):x(xx),step(s) {}
};
int visited[MaxN];
int N,K;
queue <Step> q;
void BFS(int x,int step){q.push(Step(x,step));visited[x] = 1;while(!q.empty()){Step temp = q.front();if(temp.x == K){printf("%d\n",temp.step);return ;}else{if(!visited[temp.x + 1] && temp.x + 1 <= maxsize){visited[temp.x + 1] = 1;q.push(Step(temp.x + 1,temp.step+1));}if(!visited[temp.x-1] && temp.x-1 >= 0){visited[temp.x - 1] = 1;q.push(Step(temp.x - 1,temp.step+1));}if(!visited[2 * temp.x] && 2 * temp.x <= maxsize){visited[2 * temp.x] = 1;q.push(Step(2 * temp.x,temp.step + 1));}q.pop();} }
}
int main(){scanf("%d%d",&N,&K);memset(visited,0,sizeof(visited));BFS(N,0);return 0;
}
poj4001:抓住那头牛(BFS)相关推荐
- 广度优先搜索(BFS)——抓住那头牛(POJ 4001)
本文将以(POJ 4001)抓住那头牛 为例,讲解经典算法广度优先搜索(BFS)的STL写法 在实际写算法中,怎么能不使用更快.更方便.更准确.更高效的C++ STL模板呢 相信很多人都了解过广度优先 ...
- 信息学奥赛一本通(1253:抓住那头牛)
1253:抓住那头牛 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14146 通过数: 5444 [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和 ...
- Catch That Cow(抓住那头牛C++)
Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch he ...
- C++广度优先搜索算法之抓住那头牛(Catch that cow)
抓住那头牛: 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: ...
- 抓住那头牛(POJ NO.2971)
抓住那头牛(POJ NO.2971) 总时间限制: 2000ms 内存限制: 65536kB Question 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0< ...
- 【信奥赛一本通】1253:抓住那头牛(详细代码)
[广度优先搜索算法]1253:抓住那头牛 1.[题目描述] 2.[代码] 1.[题目描述] [题目描述] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000 ...
- 抓住那头牛(BFS广搜)
描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000),牛位于点K(0≤K≤100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次移动 ...
- 抓住那头牛(宽搜bfs)
Description 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N,牛位于点K. 农夫有两种移动方式: 1.从X移动到X−1或X+1,每次移动花费一分钟. 2.从X移动到 ...
- 算法提高课-搜索-最短路模型-AcWing 1100. 抓住那头牛:bfs
题目分析 来源:acwing 分析:bfs求最短步数,需要dist[]数组来记录最短步数. ac代码 #include<bits/stdc++.h> using namespace std ...
最新文章
- Effective C# 摘录(1) - C# Language Elements
- REST 之 Spring 4 RESTful service
- MySQL 中的三中循环 while loop repeat 的基本用法
- Win10电脑定时关机无效怎么办
- laravel 图片上传 intervention/image
- javase二维数组笔记
- Hyper-V 3.0 - 关于存储迁移的一些说明
- 字符串的数组形式与指针形式
- KnockOutlook:针对Outlook的红队安全研究工具
- java房屋出租系统
- 【零基础学Python】Day8 Python基本数据类型之Dictionary
- thinkpad开机后无法进入系统怎么办?
- 六度分离_hdu_1869(floyd算法).java
- 桌面的快捷方式图标异常
- The King’s Ups and Downs HDU - 4489(计数+dp)
- java类加载器分类_Java类加载器特点的具体介绍
- Android制作粒子爆炸特效
- 删除指定位置的元素(数组)(PTA)
- H5浙里办对接流程和问题记录
- java8 集合的交集、并集、差集