티스토리 뷰
윤성우의 열혈 자료구조 chapter 02 재귀 - 하노이 타워 알고리즘
1. 작은 원반 n-1개를(맨 아래의 원반을 제외한 나머지 원반을) A에서 B로 이동
2. 큰 원반(맨 아래의 원반) 1개를 A에서 C로 이동
3. 작은 원반(위의 1단계에서 옮겨진 원반) n-1개를 B에서 C로 이동
---------------------------------------------코드--------------------------------------------------
#include <stdio.h>
void HanoiTowerMove(int num, char from, char by, char to){
if(num==1){ // 이동할 원반의 수가 1개라면
printf(“원반1을 %c에서 %c로 이동\n”, from, to);
}
else{
HanoiTowerMove(num-1, from, to, by); //1번
printf(“원반%d를 %c에서 %c로 이동\n”, num, from, to); //2번
HanoiTowerMove(num-1, by, from, to); //3번
}
int main(){
HanoiTowerMove(3, ‘A’, ‘B’, ‘C’);
return 0;
}
---------------------------------------------------------------------------------------------------
HanoiTowerMove(3, ‘A’, ‘B’, ‘C’)
else문
1. HanoiTowerMove(2, ‘A’, ‘C’, ‘B’);
else문
1. HanoiTowerMove(1, ‘A’, ‘B’, ‘C’)
if(num==1)문 -> 원반1을 A에서 C로 이동
2. 원반2를 A에서 B로 이동
3. HanoiTowerMove(1, ‘C’, ‘A’, ‘B’)
if(num==1)문 -> 원반1을 C에서 B로 이동
2. 원반3를 A에서 C로 이동
3. HanoiTowerMove(2, ‘B’, ‘A’, ‘C’)
else문
1. HanoiTowerMove(1, ‘B’, ‘C’, ‘A’)
if(num==1)문 -> 원반1을 B에서 A로 이동
2. 원반2를 B에서 C로 이동
3. HanoiTowerMove(1, ‘A’, ‘B’, ‘C’)
if(num==1)문 -> 원반1을 A에서 C로 이동