#include <stdio.h> typedef struct que { int count; int check; }que; int rear = -1; int front = 0; int arr[3000020]; que q[3000020]; int start; int finish; int deQue() { rear++; if (front == rear) return 0; return 1; } void enQue(que temp) { q[front] = temp; front++; } void BFS() { que cntQue; que nxtQue;
s2lsh90 5년 전
#include <stdio.h>
typedef struct que {
int count;
int check;
}que;
int rear = -1;
int front = 0;
int arr[3000020];
que q[3000020];
int start;
int finish;
int deQue() {
rear++;
if (front == rear) return 0;
return 1;
}
void enQue(que temp) {
q[front] = temp;
front++;
}
void BFS() {
que cntQue;
que nxtQue;
while (deQue()) {
cntQue = q[rear];
for (int i = 0; i < 3; i++) {
switch (i) {
case 0:
nxtQue.count = cntQue.count + 1;
nxtQue.check = cntQue.check;
if (arr[nxtQue.count] != 1 && nxtQue.count <= 100000) {
nxtQue.check++;
arr[nxtQue.count] = 1;
enQue(nxtQue);
}
if (nxtQue.count == finish) {
goto fi;
}
break;
case 1:
nxtQue.count = cntQue.count - 1;
nxtQue.check = cntQue.check;
if (arr[nxtQue.count] != 1 && nxtQue.count >= 0) {
nxtQue.check++;
arr[nxtQue.count] = 1;
enQue(nxtQue);
}
if (nxtQue.count == finish) {
goto fi;
}
break;
case 2:
nxtQue.count = cntQue.count * 2;
nxtQue.check = cntQue.check;
if (arr[nxtQue.count] != 1 && nxtQue.count <= 200000) {
nxtQue.check++;
arr[nxtQue.count] = 1;
enQue(nxtQue);
}
if (nxtQue.count == finish) {
goto fi;
}
break;
}
}
}
fi:;
}
int main(void) {
scanf_s("%d %d", &start, &finish);
que temp;
temp.count = start;
temp.check = 0;
arr[temp.count] = 1;
enQue(temp);
BFS();
printf("%d", q[front - 1].check);
}