
[C로 쓴 자료구조론] 1장 연습문제-11번(하노이의 탑) 풀이
두비니
·2020. 5. 16. 02:02
11번 문제
세 탑이 있는데, 첫 번째 탑에는 반경이 서로 다른 64개의 원 판들이 쌓여 있다. 이때 각 원판은 반경이 큰 순서로 아래부터 쌓여있다. 이제, 다음 규칙에 따라 수도승들이 첫 번째 탑에서 세 번째 탑으로 원판을 옮기려 한다.
(a) 한 번에 1개의 원판만을 다른 탑으로 옮길 수 있다.
(b) 쌓아놓은 원판은 항상 위의 것이 아래 것보다 작아야 한다.
이 작업을 수행하는데 필요한 이동 순서를 출력하는 순환 함수를 만들어라.
그냥 재귀함수로 구현할게요~
https://dokhakdubini.tistory.com/190?category=814319
[재귀함수] 재귀함수 구현할 때 염두에 두면 좋은 것들
작년에 c언어를 처음 배울 때도 재귀함수에 대해서 배웠는데 너무 어려워서 그냥 무시한 적이 있었는데 물론 그랬다가 지금 충분히 고통을 받을 수 있었습니다. 그래서 재귀함수와 함께 지지고
dokhakdubini.tistory.com
#include <stdio.h>
#include <stdlib.h>
void move(int from, int to);
void hanoi(int n, int from, int to, int via);
int count=0;
int main() {
int n;
printf("Please input the number of disks: ");
scanf("%d", &n);
if (n < 1) {
fprintf(stderr, "Please input number bigger than 0.\n");
exit(EXIT_FAILURE);
}
hanoi(n, 1, 3, 2);
printf("Thus, the mininal number of moves is %d.", count);
return 0;
}
void hanoi(int n, int from, int to, int via) {
if (n == 1) {
move(from, to);
count++;
}
else {
hanoi(n - 1, from, via, to);
move(from, to);
count++;
hanoi(n - 1, via, to, from);
}
}
void move(int from, int to) {
printf("The upmost disk in rod %d is moved to rod %d.\n", from, to);
}
굳굳
'Coding_Algorithm > DS_Algorithm' 카테고리의 다른 글
알고리즘 & Halting Problem (0) | 2023.06.27 |
---|---|
[C로 쓴 자료구조론] 1장 연습문제-12번(멱급수) 풀이 (1) | 2020.05.17 |
[C로 쓴 자료구조론] 1장 연습문제-10번(Ackermann 함수) 풀이 (4) | 2020.05.15 |
[C로 쓴 자료구조론] 1장 연습문제-9번(이항계수) 풀이 (0) | 2020.05.07 |
[C로 쓴 자료구조론] 1장 연습문제-8번(피보나치 수열) 풀이 (0) | 2020.05.06 |