맞는건지도 잘 모르겟네요 주석좀 자세히 적어주시면 감사하겟습니다.
#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);
}
}
답변자님,
정보를 공유해 주세요.
#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이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.