#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void hanoi(int n, int *from, int *mid, int *to);
void push(int value, int *top);
int pop(int *top);
void print(char plate, int h[], int n);
int k, n;
int *a, *b, *c; //製作三個堆疊用
int *top_a, *top_b, *top_c;
int main()
{
int i;
k = n;
a
= (int*)malloc(sizeof(int)*n
); b
= (int*)malloc(sizeof(int)*n
); c
= (int*)malloc(sizeof(int)*n
); top_a = a;
top_b = b;
top_c = c;
for(i = 0; i < n; i++)
{
*top_a = k;
if(i != n-1)
top_a++;
k--;
}
k = n;
hanoi(n, top_a, top_b, top_c);
return 0;
}
void hanoi(int n, int *from, int *mid, int *to)
{
if(n == 0)
return ;
hanoi(n-1, from, to, mid);
push(pop(from),to);
print('A', a, k);
print('B', b, k);
print('C', c, k);
hanoi(n-1, mid, from, to);
}
void push(int value, int *top)
{
*top = value;
top++;
}
int pop(int *top)
{
int temp;
if(*top == -1 ) //判斷堆疊是否為空的
return -1;
temp = *top;
*top = 0;
top--;
return temp;
}
void print(char plate, int h[], int n)
{
int i;
for(i = 0; i < n; i++)
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0cmluZy5oPgoKdm9pZCBoYW5vaShpbnQgbiwgaW50ICpmcm9tLCBpbnQgKm1pZCwgaW50ICp0byk7CnZvaWQgcHVzaChpbnQgdmFsdWUsIGludCAqdG9wKTsKaW50IHBvcChpbnQgKnRvcCk7CnZvaWQgcHJpbnQoY2hhciBwbGF0ZSwgaW50IGhbXSwgaW50IG4pOwoKaW50IGssIG47CmludCAqYSwgKmIsICpjOyAgIC8v6KO95L2c5LiJ5YCL5aCG55aK55SoIAppbnQgKnRvcF9hLCAqdG9wX2IsICp0b3BfYzsgIAogCmludCBtYWluKCkKewogICAgaW50IGk7CiAKICAgIHNjYW5mKCIlZCIsJm4pOwogCWsgPSBuOwogCQogICAgYSA9IChpbnQqKW1hbGxvYyhzaXplb2YoaW50KSpuKTsKICAgIGIgPSAoaW50KiltYWxsb2Moc2l6ZW9mKGludCkqbik7CiAgICBjID0gKGludCopbWFsbG9jKHNpemVvZihpbnQpKm4pOwogICAgbWVtc2V0KGEsIDAsIHNpemVvZihpbnQpKm4pOwogICAgbWVtc2V0KGIsIDAsIHNpemVvZihpbnQpKm4pOwogICAgbWVtc2V0KGMsIDAsIHNpemVvZihpbnQpKm4pOwoJdG9wX2EgPSBhOwoJdG9wX2IgPSBiOwogICAgdG9wX2MgPSBjOwogICAgCiAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspCgl7CiAgICAJKnRvcF9hID0gazsKICAgIAlpZihpICE9IG4tMSkgCiAgICAJCXRvcF9hKys7CiAgICAJay0tOwoJfQoJCglrID0gbjsKCWhhbm9pKG4sIHRvcF9hLCB0b3BfYiwgdG9wX2MpOwogICAgcmV0dXJuIDA7Cn0KCnZvaWQgaGFub2koaW50IG4sIGludCAqZnJvbSwgaW50ICptaWQsIGludCAqdG8pCnsKCWlmKG4gPT0gMCkKICAgICAgICByZXR1cm4gOwogICAgaGFub2kobi0xLCBmcm9tLCB0bywgbWlkKTsKICAgIHB1c2gocG9wKGZyb20pLHRvKTsKICAgIHByaW50KCdBJywgYSwgayk7CglwcmludCgnQicsIGIsIGspOwoJcHJpbnQoJ0MnLCBjLCBrKTsKCXByaW50ZigiXG4iKTsKCWhhbm9pKG4tMSwgbWlkLCBmcm9tLCB0byk7IAp9Cgp2b2lkIHB1c2goaW50IHZhbHVlLCBpbnQgKnRvcCkKewogICAgKnRvcCA9IHZhbHVlOwogICAgdG9wKys7Cn0KCmludCBwb3AoaW50ICp0b3ApCnsKICAgIGludCB0ZW1wOwoKICAgIGlmKCp0b3AgPT0gLTEgKSAvL+WIpOaWt+WghueWiuaYr+WQpueCuuepuueahAogICAgICAgIHJldHVybiAtMTsKICAgIHRlbXAgPSAqdG9wOwogICAgKnRvcCA9IDA7CiAgICB0b3AtLTsKICAgIHJldHVybiB0ZW1wOwp9Cgp2b2lkIHByaW50KGNoYXIgcGxhdGUsIGludCBoW10sIGludCBuKQp7CglpbnQgaTsKCXByaW50ZigiVG93ZXIgJWM6ICAiLHBsYXRlKTsKCWZvcihpID0gMDsgaSA8IG47IGkrKykKCQlwcmludGYoIiVkICAiLGhbaV0pOwkKCXByaW50ZigiXG4iKTsKfQ==