在看搜索前,把queue和stack都仔细的研究了一遍。
也研究了《算法导论》和严版的《数据结构》。
因为都是伪代码,理解的还不是很透彻。
具体实现还是不是很明白,这个题参考了别人的代码(几乎是边写边看的)。
不过算是理解了,理解万岁吧。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int MAXN = 300000;
int Q[MAXN], count[MAXN], sta[MAXN], n, head, tail;
void Enq ( int x ) {
Q[head++] = x;
}
int Deq ( ) {
return Q[tail++];
}
int Qempty ( ) {
if ( head == tail ) return 1;
return 0;
}
int main ( ) {
int N, K, temp;
while ( scanf ( "%d %d", &N, &K ) != EOF ) {
head = tail = 0;
memset ( count, 0, sizeof ( count ) );
memset ( Q, 0, sizeof ( Q ) );
memset ( sta, 0, sizeof ( sta ) );
Enq ( N );
sta[N] = 1;
while ( !Qempty ( ) ) {
N = Deq ( );
if ( N == K ) {
printf ( "%d\n", count[N] );
break;
}
temp = N + 1;
if ( temp <= 100000 && sta[temp] == 0 ) {
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq ( temp );
}
temp = N - 1;
if ( temp >= 0 && sta[temp] == 0 ) {
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq ( temp );
}
temp = N * 2;
if ( temp <= 100000 && sta[temp] == 0 ) {
sta[temp] = 1;
count[temp] = count[N] + 1;
Enq ( temp );
}
}
}
}