本文主要是介绍[BZOJ1646] [Usaco2007 Open]Catch That Cow 抓住那只牛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
传送门
http://www.lydsy.com/JudgeOnline/problem.php?id=1646
题目大意
给定两个点,从一个点走到另一个点的最小时间
每秒可以从x走到2*x,x-1或x+1
题解
裸的BFS,注意位置可以在0
varx,t:array[0..100005]of longint;i,j,k:longint;n,m,head,tail,v:longint;
beginfor i:=0 to 100000 do x[i]:=1000000000;readln(n,m);t[1]:=n; head:=1; tail:=2; x[n]:=0;while head<tail dobeginv:=t[head]; inc(head);if (v*2<=100000)and(x[v]+1<x[v*2]) then begin x[v*2]:=x[v]+1; t[tail]:=v*2; inc(tail); end;if (v+1<=100000)and(x[v]+1<x[v+1]) then begin x[v+1]:=x[v]+1; t[tail]:=v+1; inc(tail); end;if (v-1>=0)and(x[v]+1<x[v-1]) then begin x[v-1]:=x[v]+1; t[tail]:=v-1; inc(tail); end;end;writeln(x[m]);
end.
这篇关于[BZOJ1646] [Usaco2007 Open]Catch That Cow 抓住那只牛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!