s2lsh90   4달 전

#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);

}

댓글을 작성하려면 로그인해야 합니다.