Algorithm/Recursion
하노이 탑(Hanoi Tower)
Soongle
2019. 6. 13. 16:37
하노이 탑문제는 N개의 크기가 서로 다른 원판을 다른 기둥으로 옮기는 문제이다.
이 때 다음 두 가지 조건을 만족시키면서 원판을 다른 기둥으로 옮겨야 한다.
- 한 번에 하나의 원판만 옮길 수 있다.
- 큰 원판이 작은 원판 위에 있어서는 안된다.
전체 n개의 원판을 옮기는 것은 다음과 같이 재귀적으로 생각해 볼 수 있다.
- 크기 1 ~ (n-1)인 원판들을 A기둥에서 B기둥으로 옮긴다.
- 크기 n인 원판을 A기둥에서 C기둥으로 옮긴다.
- 1 ~ (n-1) 원판들을 B기둥에서 C기둥으로 옮긴다.
소스코드
void hanoi(int n, char from, char tmp, char to)
{
if(n > 0)
{
hanoi(n-1, from, to, tmp);
cout<< n << " : " << from << " -> " << to << endl;
hanoi(n-1, tmp, from, to);
}
}
원판의 크기를 n이라 할 때, n은 자연수이므로 (n > 0)가 아닌 경우를 탈출 조건으로 한다.
전체 소스코드
더보기
#include <iostream>
using namespace std;
void hanoi(int n, char from, char tmp, char to)
{
if(n > 0)
{
hanoi(n-1, from, to, tmp);
cout << n << " : " << from << " -> " << to << endl;
hanoi(n-1, tmp, from, to);
}
}
int main()
{
int n;
cin >> n;
hanoi(n, 'A', 'B', 'C');
return 0;
}