#include#include //元素elem进栈 int push(int* a, int top, int elem) { top++; a[top] = elem; //printf("%d被压栈了nn", elem); return top; } //数据元素出栈 int pop(int* a, int top) { if (top == -1) { printf("空栈"); return -1; } //printf("弹栈元素:%dn", a[top]); top--; return top; } int main() { void Hanoi(int* stack1, int* stack2, int* stack3, int n, int top1, int top2, int top3, char,char,char); int stack1[3] = {2,1,0};//第一座塔 int stack2[3];//第二座塔 int stack3[3];//第三座塔 //初始的汉诺塔 int top1 = 2;//标记第一个塔的顶部 int top2 = -1; int top3 = -1; char a = 'a';//代表第一个塔 char b = 'b';//代表第二个塔 char c = 'c';//代表第三个塔 Hanoi(stack1, stack2, stack3, 3, top1, top2, top3,a,b,c); for (int i = 0; i < 3; i++) { printf("%dn", stack3[i]); } } void Hanoi(int* stack1, int* stack2, int* stack3, int n, int top1, int top2, int top3, char a,char b,char c) { if (n > 1) { Hanoi(stack1, stack3, stack2, n - 1, top1, top3, top2,a,c,b); top1 = top1 - n + 1; top2 = top2 + n - 1; int temp = stack1[top1]; top1 = pop(stack1, top1); top3 = push(stack3, top3, temp); printf("将%c中的%d移动到%c中n", a, temp, c); Hanoi(stack2, stack1, stack3, n - 1, top2, top1, top3,b,a,c); } else { int temp = stack1[top1]; top1 = pop(stack1, top1); top3 = push(stack3, top3, temp); printf("将%c中的%d移动到%c中n", a, temp, c); } }
修改输入的汉诺塔层数需要修改stack1内的元素和top1的值,top1指向stack1的最后一个元素
在程序输出中,a代表第一座塔,b代表第二座塔,以此类推。



