728x90
하노이 타워의 기본 규칙
- A개의 세 원반을 C로 옮기기 위해서는 원반 3을 C로 옮겨야 하고 그러기 위해서는 1,2를 B로 옮겨야 함 1,2를 옮기기 위해서는 원반 2를 B로 옮겨야 하고 그러기 위해서는 1을 C로 옮겨야 함
- 이 과정이 4개가 있어도 8개가 있어도 위의 재귀 과정을 반복하게 됨
- 위 과정을 단계로 표현하면
0. 큰 원반 n개를 A에서 C로 이동
1. 작은 원반 n-1개를 A에서 B로 이동
2. 큰 원반 1개를 A에서 C로 이동
3. 작은 원반 n-1개를 B에서 C로 이동
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); // 3단계 중 1단계
printf("원반%d을(를) %c에서 %c로 이동 \n", num, from, to); // 3단계 중 2단계
HanoiTowerMove(num-1, by, from, to); // 3단계 중 3단계
}
}
int main(void)
{
// 막대A의 원반 3개를 막대B를 경유하여 막대C로 옮기기
HanoiTowerMove(3, 'A', 'B', 'C');
return 0;
}
728x90
'Programming > Data Structure' 카테고리의 다른 글
열혈 자료구조 - 3-2. 배열을 이용한 리스트의 구현(1) (0) | 2020.12.05 |
---|---|
열혈 자료구조 - 3-1. 추상 자료형 (0) | 2020.12.03 |
열혈 자료구조 - 2-2. 재귀의 활용 (0) | 2020.11.29 |
열혈 자료구조 - 2-1. 함수의 재귀적 호출의 이해 (0) | 2020.11.29 |
열혈 자료구조 - 1-2. 알고리즘의 성능 분석 방법(4) (0) | 2020.11.29 |