diff --git "a/2224020152/\347\254\254\344\272\224\345\215\225\345\205\203/\351\207\207\347\224\250\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\346\261\202\350\247\243Hanoi\351\227\256\351\242\230.cpp" "b/2224020152/\347\254\254\344\272\224\345\215\225\345\205\203/\351\207\207\347\224\250\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\346\261\202\350\247\243Hanoi\351\227\256\351\242\230.cpp" new file mode 100644 index 0000000000000000000000000000000000000000..12ccd7c9d16fcbe0d1f01dd62bfade302ed145b3 --- /dev/null +++ "b/2224020152/\347\254\254\344\272\224\345\215\225\345\205\203/\351\207\207\347\224\250\351\200\222\345\275\222\345\222\214\351\235\236\351\200\222\345\275\222\346\226\271\345\274\217\346\261\202\350\247\243Hanoi\351\227\256\351\242\230.cpp" @@ -0,0 +1,62 @@ +#include "sqstack.h" - +void Hanoi1(int n, char a, char b, char c) +{ + if (n == 1) + printf("\t将第%d个盘片从%c移动到%c\n", n, a, c); + else + { + + + Hanoi1(n-1,a,c,b); + + printf("\t将第%d个盘片从%c移动到%c\n", n, a, c); + Hanoi1(n - 1, b, a, c); + } +} + + +void Hanoi2(int n, char x, char y, char z) +{ + StackType *st; + ElemType e, e1, e2, e3; + if (n <= 0) return; + InitStack(st); + e.n = n; e.x = x; e.y = y; e.z = z; e.flag = false; + + Push(st,e); + + + while (!StackEmpty(st)) + { + + Pop(st,e); + + if (e.flag == false) + { + e1.n = e.n - 1; e1.x = e.y; e1.y = e.x; e1.z = e.z; + if (e1.n == 1) + e1.flag = true; + else + e1.flag = false; + Push(st, e1); + e2.n = e.n; e2.x = e.x; e2.y = e.y; e2.z = e.z; e2.flag = true; + + + Push(st,e2); + + e3.n = e.n - 1; e3.x = e.x; e3.y = e.z; e3.z = e.y; + if (e3.n == 1) + e3.flag = true; + else + e3.flag = false; + + + Push(st,e3); + + } + else + printf("\t将第%d个盘片从%c移动到%c\n", e.n, e.x, e.z); + } + DestroyStack(st); +} +