반응형
   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:  }

 

위 소스에 대한 해석:

User comments 
http://sn.im/ebg4o

 

결과화면:

hanoi_1 hanoi_2 hanoi_3 hanoi_4 hanoi_5 hanoi_6 hanoi_7 hanoi_8 hanoi_9 hanoi_10 hanoi_11

반응형
,