[C언어]순환을 이용한 하노이 타워 소스
2009. 3. 22. 14:14
반응형
1: #include <stdio.h>
2: #include <string.h>
3: #define HEIGHT 6 // 탑의 높이를 HEIGHT으로 정함 (상수화)
4:
5: char A[HEIGHT+1] = {'6', '5', '4', '3', '2', '1'}; // from으로 사용될 A
6: char B[HEIGHT+1] = {'\0'}; // temp로 사용될 B
7: char C[HEIGHT+1] = {'\0'}; // to로 사용될 C
8:
9: void hanoi_tower(int n, char *from, char *tmp, char *to) //하노이 타워 구현
10: {
11: int i;
12:
13: if(n == 1)
14: {
15: to[strlen(to)] = from[strlen(from)-1]; // from의 마지막블록을 to마지막으로 이동
16: from[strlen(from)-1] = '\0'; // from의 마지막꺼에 null 대입(원본을 삭제해야 이동한 것처럼 보이기 때문)
17:
18: for(i = HEIGHT - 1; i >= 0; i--) // 각 배열의 값 출력
19: printf("%c %c %c \n", A[i] , B[i] , C[i]);
20: printf("A B C\n"); // 각 기둥을 출력
21: }
22:
23: else
24: {
25: hanoi_tower(n-1, from, to, tmp);
26:
27: to[strlen(to)] = from[strlen(from)-1]; // from의 마지막블록을 to마지막으로 이동
28: from[strlen(from)-1] = '\0'; // from의 마지막꺼에 null 대입
29:
30: for(i = HEIGHT - 1; i >= 0; i--) // 각 배열의 값 출력
31: printf("%c %c %c \n", A[i] , B[i] , C[i]);
32: printf("A B C\n\n");
33:
34: hanoi_tower(n-1, tmp, from, to); // 각 기둥을 출력
35: }
36: }
37:
38: int main(void)
39: {
40: int i; // index변수 선언
41:
42: for(i = HEIGHT; i >= 0; i--) // 초기 배열의 입력 된 값을 출력
43: printf("%c %c %c\n", A[i], B[i], C[i]);
44: printf("A B C\n"); // 각 기둥을 출력
45:
46: hanoi_tower(HEIGHT, A, B, C); // hanoi_tower의 재귀 함수 호출
47: getch();
48: return 0;
49: }
위 소스에 대한 해석:
결과화면:
반응형
'프로그래밍 실습 > C언어' 카테고리의 다른 글
| [C언어] 2차원 배열을 이용한 성적 처리 (1) | 2011.01.02 |
|---|---|
| [C언어] 1차원 배열을 이용한 성적 처리 (0) | 2011.01.02 |
| 가장 큰 정수 찾기 (0) | 2010.05.09 |
| 알고리즘의 기초 최대공약수 구하기 (0) | 2009.09.05 |
