#include <stdio.h>
int a[5]={4,4,3,2,1}; // a[0] 는 stack a 의 top을 나타낸다
int b[5]={0,}; // b[0] stack b top
int c[5]={0,}; // c[0] stack c top
int *z[3]={a,b,c};
void show() {
int i;
printf("A: ");for(i=1;i<5;i++) printf("%d ",a[i]); printf(" ");
printf("B: ");for(i=1;i<5;i++) printf("%d ",b[i]); printf(" ");
printf("C: ");for(i=1;i<5;i++) printf("%d ",c[i]); printf("\n");
}
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() {
show();
hanoi(4, 'A', 'B', 'C');
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
입력을 받는 수의 숫자를 뒤집는 법 (0) | 2012.03.29 |
---|---|
float 입출력에 관한 질문 (0) | 2012.03.29 |
fgets로 파일읽기 (0) | 2012.03.27 |
문자열 복사하기 (0) | 2012.03.27 |
소수점이 있는 십진수 뒤집어서 출력하기 (0) | 2012.03.26 |