#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int size=0;
int a[11]={0,}; // a[0] 는 stack a 의 top을 나타낸다
int b[11]={0,}; // b[0] stack b top
int c[11]={0,}; // c[0] stack c top
int *z[3]={a,b,c};
void initialize() {
int i;
a[0]=size;
for(i=1;i<size+1;++i) a[i]=size+1-i;
}
void show() {
int i;
system("cls");
printf("\n");
for(i=0;i<size;++i) {
printf(" ");
if(a[size-i]) printf("%2d",a[size-i]); else printf(" "); printf(" ");
if(b[size-i]) printf("%2d",b[size-i]); else printf(" "); printf(" ");
if(c[size-i]) printf("%2d",c[size-i]); else printf(" "); printf("\n");
}
printf(" --- --- ---\n");
printf(" A B C\n\n");
getch();
}
void move(int disk, char source, char dest) {
int s=source-'A';
int d=dest-'A';
int x=z[s][z[s][0]];
z[s][z[s][0]--]=0;
//if(x==disk) printf("ok ");
z[d][++(z[d][0])]=x;
show();
}
void hanoi(int n, char a, char b, char c){
if(n==1) move(1,a,c); //printf("원판 1을 %c 에서 %c 으로 옮긴다.\n", a,c);
else {
hanoi(n-1, a,c,b);
move(n,a,c); //printf("원판 %d 을 %c에서 %c으로 옮긴다.\n", n,a,c);
hanoi(n-1,b,a,c);
}
}
int main() {
printf("크기: ");
scanf("%d", &size);
initialize();
show();
hanoi(size, 'A', 'B', 'C');
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
차집합을 구하는 프로그램 (0) | 2012.04.23 |
---|---|
배열의 크기를 동적으로 늘리는 방법 (0) | 2012.04.23 |
2진수의 자리이동 (0) | 2012.04.19 |
중위표기법의 입력문제 (0) | 2012.04.16 |
입력받은 단어 랜덤으로 나열하고 하나만 뽑아내는 프로그램 (0) | 2012.04.15 |