BFS PKU 3278
来源:互联网 发布:mac系统好还是windows 编辑:程序博客网 时间:2024/05/17 04:02
一道很简单的,典型的BFS。
代码虐我千百遍,我待代码如初恋
Catch That Cow
Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 47366 Accepted: 14869
Description
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.
* Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.
If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?
Input
Line 1: Two space-separated integers: N and K
Output
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
Sample Input
5 17
Sample Output
4
Hint
The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
Source
USACO 2007 Open Silver
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <ctype.h>#include <limits.h>#include <string.h>#include <string>#include <math.h>#include <algorithm>#include <iostream>#include <queue>#include <stack>#include <vector>#include <set>#include <map>#include <deque>using namespace std;#define MAXN 100000 + 10int vis[MAXN];int k;struct node{ int num; int sum; //int vis;}a[MAXN];void BFS(int n){ queue<node>q; node front; node rear; front.num = n; vis[n] = 1; front.sum = 0; q.push(front); int mark1; int mark2; int mark3; //int mark4; //int sum = 0; while(!q.empty()){ front = q.front(); q.pop(); if(front.num == k){ printf("%d\n",front.sum); break; } mark1 = front.num - 1; mark2 = front.num + 1; mark3 = front.num*2; if(mark1>=0 && vis[mark1]==0){ rear.num = mark1; rear.sum = front.sum+1; //sum++; vis[mark1] = 1; q.push(rear); } if(mark2<=100000 && vis[mark2]==0){ rear.num = mark2; //sum++; rear.sum = front.sum + 1; vis[mark2] = 1; q.push(rear); } if(mark3<=100000 && vis[mark3]==0){ rear.num = mark3; //sum++; rear.sum = front.sum + 1; vis[mark3] = 1; q.push(rear); } }}int main(){ int n; while(~scanf("%d%d",&n,&k)){ memset(vis,0,sizeof(vis)); //memset(a,0,sizeof(a)); BFS(n); } return 0;}
0 0
- BFS PKU 3278
- pku 3278 Catch That Cow bfs
- pku 1101 bfs
- pku 1426 bfs
- pku 3126 bfs
- pku 1915(BFS)
- pku 1077 Eight BFS
- BFS PKU 1915
- pku 3278 Catch That Cow---BFS
- pku 1915 Knight Moves (bfs)
- pku 3414 Pots 经典BFS
- Pku acm 3278 Catch That Cow数据结构题目解题报告(五) ----树的BFS
- pku--3278 catch the cow 方法二 不用结构体(BFS)
- pku 3278
- PKU 3278
- pku 1915 Knight Moves(双向BFS)
- pku 2251 Dungeon Master 基本BFS
- pku 1915 Knight Moves 双向BFS
- Row_Number()
- [leetcode] Insert Interval
- linux Camera 驱动和编程
- 法律事务-权限模块
- js 原型 数组合并且删除重复部分
- BFS PKU 3278
- 好久 ---献给为好久苦恼的人儿
- linux rsync同步定时任务操作
- 安卓 Activity中获取ListView子View中控件
- Android WebView 因重定向无法正常goBack()解决方案
- 智能指针_通用工具_STL
- linux等待队列wait_queue_head_t和wait_queue_t
- HTML5全球普及将加速 或终结iOS与安卓界限
- 开源 Java 中文分词器 Ansj 作者孙健专访