기타/자료구조 & 알고리즘

[재귀] 하노이 타워

푸쿠이 2018. 4. 9. 20:26

함수의 재귀적 호출을 이용하여 c언어로 하노이 타워를 구현

 

하노이 탑 규칙

1. 가장 위의 원판만 이동 가능함

2. 작은 원판 위로 큰 원판이 올라갈 수 없음

3. 최소 이동횟수로 이동해야함

4. 한번에 하나의 원판만 이동해야 함

 

 

 

 

제일 밑의 원판을 옮기기 위해 위의 원판들을 B로 옮긴다 (A->B)

-> hanoi(n-1,a,c,b);

 

제일 밑의 원판을 A에서 C로 옮겨야 한다. (A->C)

-> printf("%d 원반이 %c -> %c\n",n,a,c);

 

제일 밑의 원판을 C로 옮겼으므로 B에 있던 원판들을 다시 A로 옮긴다 (B->C)/p>

-> hanoi(n-1,b,a,c);

 

// 하노이 타워  
void hanoi(int n, char a, char b, char c)
{      
	if(n==0)
	{
		return;
	}
	
	hanoi(n-1,a,c,b);
	printf("%d 원반이 %c -> %c\n",n,a,c);
	hanoi(n-1,b,a,c);  
}  

int main()
{     
	int n;
	scanf("%d",&n);
    
	hanoi(n,'A','B','C');
}