1. 程式人生 > >Catch That Cow(BFS)

Catch That Cow(BFS)

【題目描述】 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點N(0<=N<=100000)N(0<=N<=100000),牛位於點K(0<=K<=100000)K(0<=K<=100000) 農夫有兩種移動方式:

1、從 XX 移動到 X1X-1X+1X+1 ,每次移動花費一分鐘

2、從 XX 移動到 2X2*X ,每次移動花費一分鐘

假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要花多少時間才能抓住牛?

【思路】 最短路模型,直接建圖跑dij會T,直接寫BFS能過

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;

const int maxn=200005;

int n,s,t;
int a[maxn];

void bfs(){
	queue<int> que;
	que.push(s);
	a[s]=0;
	while(!que.empty()){
		int x=que.front();
		que.pop();
		if(x==t) break;
		if(x-1>=0 && a[x-1]==-1){
			a[x-1]=a[x]+1;
			que.push(x-1);
		}
		if(x+1<=n && a[x+1]==-1){
			a[x+1]=a[x]+1;
			que.push(x+1);
		}
		if(x*2<=n && a[x*2]==-1){
			a[x*2]=a[x]+1;
			que.push(x*2);
		}
	}
}

int main(){
	scanf("%d%d",&s,&t);
	n=max(s,t)*2;
	memset(a,-1,sizeof(a));
	bfs();
	printf("%d\n",a[t]);
	return 0;
}