NAVER

질문 하노이탑 에 대해서
rhs1**** 조회수 2,055 작성일2010.04.21

맞는건지도 잘 모르겟네요 주석좀 자세히 적어주시면 감사하겟습니다.

 

#include <stdio.h>

 

int cnt = 0 ;

void movehanoi(char a, char b, char c, int n);

 

int main(void)

{

int n;

 

printf("종료하려면 1보다 작은 정수를 입력하세요.\n\n");

printf("하노이 탑에서 옮기려는 원반의 수는? >");

scanf("%d", &n);

 

while(n>0) //whole문

{

movehanoi('A','B','C', n); //하노이탑 재귀함수 호출

cnt=0;

printf("\n하노이 탑에서 옮기려는 원반의 수는? >");

scanf("%d", &n);

}

return 0;

}

void movehanoi(char from, char temp, char to, int n)

{

if(n==1)

{

++cnt;

printf("%5d: 말뚝 %c 에서 %c로 원반 %d 을 이동 \n", cnt, from, to, 1);

}

else

{

movehanoi(from, to, temp, n-1);

++cnt;

printf("%5d: 말뚝 %c에서 말뚝 %c로 원반 %d을 이동\n", cnt, from, to, n);

movehanoi(temp, from, to, n-1);

}

}

프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
qwegfdzxc
중수
C, C++ 분야에서 활동
본인 입력 포함 정보

#include <stdio.h>

 

int cnt = 0 ;

void movehanoi(char a, char b, char c, int n);

 

int main(void)

{

int n;

 

printf("종료하려면 1보다 작은 정수를 입력하세요.\n\n");

printf("하노이 탑에서 옮기려는 원반의 수는? >");

scanf("%d", &n);

 

while(n>0) 

{

movehanoi('A','B','C', n); //하노이탑 재귀함수 호출

cnt=0;

printf("\n하노이 탑에서 옮기려는 원반의 수는? >");

scanf("%d", &n); // 옮기려는 원반 수 입력

}

return 0;

}

void movehanoi(char from, char temp, char to, int n)

{

if(n==1)

{

++cnt; // cnt는 몇번째 작업인지 세어주는 변수

printf("%5d: 말뚝 %c 에서 %c로 원반 %d 을 이동 \n", cnt, from, to, 1);

}

else

{

movehanoi(from, to, temp, n-1); // from에서 temp로 to를 이용하여  n-1개의 원반을 이동시킴.

++cnt;

// n-1개를 temp로 이동시켰으므로 나머지 1개의 원반을 to로 이동시킴.

printf("%5d: 말뚝 %c에서 말뚝 %c로 원반 %d을 이동\n", cnt, from, to, n);

movehanoi(temp, from, to, n-1); // temp에 있는 n-1개의 원반을 to로 from을 이용하여 이동시킴.

}

}

2010.04.21.

  • 채택

    질문자가 채택한 답변입니다.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.