poj 3278 简单BFS

时间:2022-03-22 10:39:03

题意:给定农夫和奶牛的初始位置,农夫可以当前位置+1、-1、*2三种移动方式,问最少需要多少分钟抓住奶牛

AC代码:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=100000+5;
const int dx[]={-1,1,2};
int d[maxn];
int n,k;
int bfs(){
	queue<int>q;
	memset(d,-1,sizeof(d));
	d[n]=0;
	q.push(n);
	while(!q.empty()){
		int now=q.front();
		q.pop();
		if(now==k) return d[k];
		for(int i=0;i<3;++i){
			int w;
			if(i==2) w=now*dx[i];
			else w=now+dx[i];
			if(w<0||w>maxn||d[w]!=-1) continue;
			q.push(w);
			d[w]=d[now]+1;
		}
	}
	return -1;
}
int main(){
	while(scanf("%d%d",&n,&k)!=EOF){
		printf("%d\n",bfs());
	}
	return 0;
}

如有不当之处欢迎指出!