POJ 3278 Catch That Cow

解题思路:BFS

代码
#include <iostream>
#include
<cmath>
using namespace std;
#define MAXN 100001
int n, k, q[MAXN];
bool visit[MAXN];
int main()
{
int s, e, p, i, j,step,minStep;
while (scanf("%d %d", &n, &k)!=EOF)
{
q[
0]=n,s=e=step=0,minStep=MAXN;
if(n>=k)minStep=step=n-k;
memset(visit,
0, sizeof(visit));
while(s<=e&&step<minStep)
{
for(i=s,p=e;i<=e;i++)
{
if(q[i]==k&&minStep>step)minStep=step;
if(q[i]-1>=0&&!visit[q[i]-1])q[++p]=q[i]-1,visit[q[p]]=true;
if(q[i]+1<=k&&!visit[q[i]+1])q[++p]=q[i]+1, visit[q[p]]=true;
if(2*q[i]<=k&&!visit[2*q[i]])q[++p]=2*q[i],visit[q[p]]=true;
else if(2*q[i]>k)
{
if(2*q[i]-k+step+1<minStep)minStep=2*q[i]-k+step+1;
if(k-q[i]+step<minStep)minStep=k-q[i]+step;
}
}
step
++,s=e+1,e=p;
}
printf(
"%d\n", minStep);
}
return 0;
}

 

posted on 2010-12-16 11:53  ltang  阅读(206)  评论(0编辑  收藏  举报

导航