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 ;
}

 

你可能感兴趣的:(catch)