/*
说一下自己的理解吧,DFS感觉是走一条路,如果不对了,回溯,直到把所有路都走完
这题BFS大概就是把所有可能解全放到队列里,然后一个一个排除,不需要回溯的,所以也不用递归,一层循环就OK了。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int head, tail;
int Q[400000], cout[400000], via[400000];
void Enq( int x )
{
Q[head++] = x;
}
int Deq( void )
{
return Q[tail++];
}
int Qempty( void )
{
if( head == tail )
return 1;
return 0;
}
int main()
{
int N, K, temp;
while( scanf( "%d%d", &N, &K ) != EOF )
{
head = 0;
tail = 0;
memset(cout, 0, sizeof(cout) );
memset(Q, 0, sizeof(Q) );
memset(via, 0, sizeof(via) );
Enq(N);
via[N] = 1;
while( !Qempty() )
{
N = Deq();
if( N == K )
{
printf( "%d\n", cout[N] );
break;
}
temp = N + 1;
if( temp <= 100000 && via[temp] == 0 )
{
via[temp] = 1;
cout[temp] = cout[N]+1;
Enq(temp);
}
temp = N - 1;
if( temp >= 0 && via[temp] == 0 )
{
via[temp] = 1;
cout[temp] = cout[N]+1;
Enq(temp);
}
temp = N * 2;
if( temp <= 100000 && via[temp] == 0 )
{
via[temp] = 1;
cout[temp] = cout[N] +1;
Enq(temp);
}
}
}
return 0;
}
POJ 3278
最新推荐文章于 2025-03-30 16:45:00 发布