#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int k; //紀錄有幾個Plate
int *a, *b, *c; //用來製作三個Stack
void hanoi(int n, int *form, int *mid, int *to, char a, char b, char c);
int pop(int *pillar);
void push(int temp, int *pillar);
void print(int *a, int *b, int *c, int n);
void hanoi(int n, int *form, int *mid, int *to, char ta, char tb, char tc)
{
if(n == 0)
return ;
hanoi(n-1, form, to, mid, ta, tc, tb);
push(pop(form), to);
printf("Move disks %d from %c -> %c\n",n
, ta
, tc
); print(a, b, c, k-1);
hanoi(n-1, mid, form, to, tb, ta, tc);
}
int pop(int *pillar)
{
int temp;
int i = 0;
while(*(pillar+i) != 0)
i++;
i--;
temp = *(pillar+i);
*(pillar+i) = 0;
return temp;
}
void push(int temp, int *pillar)
{
int i = 0;
while(pillar[i] != 0)
i++;
*(pillar+i) = temp;
}
void print(int *a, int *b, int *c, int n)
{
int i, j;
for(i = 0; i < n; i++)
for(i = 0; i < n; i++)
for(i = 0; i < n; i++)
}
int main()
{
int i, n;
printf("《Tower of Brahma puzzle》\n\n"); printf("Enter the number of disks: "); scanf("%d",&n
); //輸入圓盤的數量 k = n+1;
//創造三個空堆節
a
= (int*)malloc(sizeof(int)*k
); b
= (int*)malloc(sizeof(int)*k
); c
= (int*)malloc(sizeof(int)*k
);
for(i = 0; i < n; i++)
a[i] = n - i;
print(a, b, c, n);
hanoi(n, a, b, c, 'A', 'B', 'C');
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKaW50IGs7CS8v57SA6YyE5pyJ5bm+5YCLUGxhdGUgCmludCAqYSwgKmIsICpjOyAvL+eUqOS+huijveS9nOS4ieWAi1N0YWNrIAoKdm9pZCBoYW5vaShpbnQgbiwgaW50ICpmb3JtLCBpbnQgKm1pZCwgaW50ICp0bywgY2hhciBhLCBjaGFyIGIsIGNoYXIgYyk7CmludCBwb3AoaW50ICpwaWxsYXIpOyAKdm9pZCBwdXNoKGludCB0ZW1wLCBpbnQgKnBpbGxhcik7CnZvaWQgcHJpbnQoaW50ICphLCBpbnQgKmIsIGludCAqYywgaW50IG4pOwoKdm9pZCBoYW5vaShpbnQgbiwgaW50ICpmb3JtLCBpbnQgKm1pZCwgaW50ICp0bywgY2hhciB0YSwgY2hhciB0YiwgY2hhciB0YykKewoJaWYobiA9PSAwKQoJCXJldHVybiA7CiAgICBoYW5vaShuLTEsIGZvcm0sIHRvLCBtaWQsIHRhLCB0YywgdGIpOwogICAgcHVzaChwb3AoZm9ybSksIHRvKTsKICAgIHByaW50ZigiTW92ZSBkaXNrcyAlZCBmcm9tICVjIC0+ICVjXG4iLG4gLCB0YSwgdGMpOwogICAgcHJpbnQoYSwgYiwgYywgay0xKTsKICAgIHByaW50ZigiXG4iKTsKCWhhbm9pKG4tMSwgbWlkLCBmb3JtLCB0bywgdGIsIHRhLCB0Yyk7IAp9CgppbnQgcG9wKGludCAqcGlsbGFyKQp7CglpbnQgdGVtcDsKCWludCBpID0gMDsKCgl3aGlsZSgqKHBpbGxhcitpKSAhPSAwKQoJCWkrKzsKCWktLTsKCXRlbXAgPSAqKHBpbGxhcitpKTsKCSoocGlsbGFyK2kpID0gMDsKCXJldHVybiB0ZW1wOwp9Cgp2b2lkIHB1c2goaW50IHRlbXAsIGludCAqcGlsbGFyKQp7CglpbnQgaSA9IDA7Cgl3aGlsZShwaWxsYXJbaV0gIT0gMCkKCQlpKys7CgkqKHBpbGxhcitpKSA9IHRlbXA7Cn0KCnZvaWQgcHJpbnQoaW50ICphLCBpbnQgKmIsIGludCAqYywgaW50IG4pCnsJCglpbnQgaSwgajsKCQoJcHJpbnRmKCJUb3dlciBBOiAgIik7Cglmb3IoaSA9IDA7IGkgPCBuOyBpKyspCgkJcHJpbnRmKCIlZCAgIiwgYVtpXSk7CglwcmludGYoIlxuIik7CgkKCXByaW50ZigiVG93ZXIgQjogICIpOwoJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQoJCXByaW50ZigiJWQgICIsIGJbaV0pOwoJcHJpbnRmKCJcbiIpOwoJCglwcmludGYoIlRvd2VyIEM6ICAiKTsKCWZvcihpID0gMDsgaSA8IG47IGkrKykKCQlwcmludGYoIiVkICAiLCBjW2ldKTsKCXByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgaSwgbjsKICAgIAogICAgcHJpbnRmKCLjgIpUb3dlciBvZiBCcmFobWEgcHV6emxl44CLXG5cbiIpOwogICAgcHJpbnRmKCJFbnRlciB0aGUgbnVtYmVyIG9mIGRpc2tzOiAiKTsKICAgIHNjYW5mKCIlZCIsJm4pOyAvL+i8uOWFpeWck+ebpOeahOaVuOmHjyAKICAgIGsgPSBuKzE7CiAgICAKIAkvL+WJtemAoOS4ieWAi+epuuWghuevgCAKICAgIGEgPSAoaW50KiltYWxsb2Moc2l6ZW9mKGludCkqayk7CiAgICBiID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpKmspOwogICAgYyA9IChpbnQqKW1hbGxvYyhzaXplb2YoaW50KSprKTsKICAgIG1lbXNldChhLCAwLCBzaXplb2YoaW50KSprKTsKICAgIG1lbXNldChiLCAwLCBzaXplb2YoaW50KSprKTsKICAgIG1lbXNldChjLCAwLCBzaXplb2YoaW50KSprKTsKCQoJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQoJCWFbaV0gPSBuIC0gaTsKICAgIAogICAgcHJpbnQoYSwgYiwgYywgbik7CiAgICBwcmludGYoIlxuIik7CiAgICBoYW5vaShuLCBhLCBiLCBjLCAnQScsICdCJywgJ0MnKTsKICAgIHByaW50ZigiRW5kIG9mIHRoZSB3b3JsZCIpOwogICAgCglyZXR1cm4gMDsgICAgCn0=