하노이 탑 검색해보면 수두룩 뺵뺵빽이 나온다.
그럼에도 글을 쓰는 이유는 무엇이냐....
(그림 출처 : http://programs-ram.blogspot.kr/2015/01/c-program-to-print-tower-of-hanoi-using.html)
대부분의 블로그에서 하노이탑 설명이 위의 그림처럼 3번째 기둥에서 마무리 짓는 형태로 설명하고 있다.
그러면서 코드는 만들어놓은게
#include <stdio.h> #include <stdlib.h> int Cnt; void hanoi(int n, int a, int b) { int temp; if(n==1) { printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b); } else { temp=6-a-b; hanoi(n-1, a, temp); printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b); hanoi(n-1, temp, b); } Cnt++; } int main() { int n; printf("Input disk number:"); fflush(stdout); scanf("%d", &n); hanoi(n, 1, 2); printf("Count : %d\n",Cnt); return 0; }
|
위의 코드다 코드 출처는 위키 피디아~
위의 코드와 그림의 설명은 약간 다르다.
이것 때문에 무지 헷갈렸다.
위의 그림은 3번째 기둥에 마지막 원판을 올리지만 위의 코드는 2번째 기둥에 마지막 원판을 올린다.
즉 이 코드를 위의 그림 처럼 실행시키고 싶으면
#include <stdio.h> #include <stdlib.h> int Cnt; void hanoi(int n, int a, int b) { int temp; if(n==1) { printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b); } else { temp=6-a-b; hanoi(n-1, a, temp); printf("Move %d, move from Fall%d, to Fall%d\n", n, a, b); hanoi(n-1, temp, b); } Cnt++; } int main() { int n; printf("Input disk number:"); fflush(stdout); scanf("%d", &n); hanoi(n, 1, 3); printf("Count : %d\n",Cnt); return 0; }
|
위의 코드처럼 hanoi(n, 1, 3); 으로 해줘야한다.
hanoi(n-1, a, temp); 의 부분은 n-1개의 원판을 a라는 기둥에서 temp(임시로 원판을 옮기는 기둥)기둥으로 옮기는 과정인데 위의 그림처럼할려면 temp기둥은 2번째 기둥이 되어야한다.
마찬가지로
hanoi(n-1, temp, b);여기는 temp 임시로 옮겼던 원판을 b기둥으로 꼽는다.
설명은 그림처럼 해놓고
코드는 다르게 짜놓은 사람보면 .....;;;;;;
내가 멍청한건가.....
'C언어' 카테고리의 다른 글
힙 정렬 (Heap Sort) (0) | 2016.04.15 |
---|