POJ3278 Catch That Cow BFS

题源:http://poj.org/problem?id=3278
题意:一个坐标轴的正半轴,有起点和终点。从起点开始,每次可以选择向左或向右移动一格,或者坐标乘以二,每次移动耗时为1,问最快多久到终点。
思路:BFS,注意不越界。
下面是AC代码。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
#define MID (t[k].l+t[k].r)>>1
#define cl(a,b) memset(a,b,sizeof(a))
using namespace std;
//是广搜  你写个P的深搜!!!
const int maxn=1e5+10;
int n,k;
int book[maxn];
struct node {
	int id,time;
};
queue<node> q;
inline bool check(int p) { //检查坐标是否合适
	if(p<0||p>1e5||book[p]) return false;
	else return true;
}
int main() {
	cin>>n>>k;
	cl(book,0);
	node temp;
	temp.id=n,temp.time=0;
	q.push(temp);
	book[n]=1;
	while(!q.empty()) {
		int p=q.front().id,t=q.front().time;
		q.pop();
//		if(book[p]) continue;  //若不加在这里  就要在最开始 book[头]置一
//		book[p]=1;
		if(p==k) { //找到一个就行。。。
			printf("%d\n",t);
			return 0;
		}
		//不分情况讨论 就对 分情况就不对(temp
		temp.id=p+1,temp.time=t+1;
		if(temp.id==k){
			printf("%d\n",temp.time);
			return 0;
		}
		if(check(temp.id)) {
			q.push(temp);
			book[temp.id]=1;
		}
		
		temp.id=p-1,temp.time=t+1;
		if(temp.id==k){
			printf("%d\n",temp.time);
			return 0;
		}
		if(check(temp.id)) {
			q.push(temp);
			book[temp.id]=1;
		}
		
		temp.id=p*2,temp.time=t+1;
		if(temp.id==k){
			printf("%d\n",temp.time);
			return 0;
		}
		if(check(temp.id)) {
			q.push(temp);
			book[temp.id]=1;
		}
	}
	return 0;
}

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值