汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 `Lr], >aG
W"NI^OX
include <iostream> f^F;`;z
#include <stdlib.h> *Al@|5
>d + }$dB
#ifdef _WIN32 b$_81i
using namespace std; 7gC?<;\0
#endif !.vyzCJTzB
r:H]`Uo'r
static void hanoi(int height) . &^p@A~
{ 6w^P{%ul
int fromPole, toPole, Disk; bU=Utniq
int *BitStr = new int[height], //用来计算移动的盘的号码 !d72f8@9
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号
enQ*uMKd^
char Place[] = {'A', 'C', 'B'}; =QqH`.3
int i, j, temp; &A0OYV3i.
z<%P"
for (i=0; i < height; i++) Nr4}x7
{ #V>R#Oh}
BitStr = 0; P 9?cp{*
Hold = 1; qf? "v;
} _ ;HdX$op
temp = 3 - (height % 2); //第一个盘的柱号 !xsfhLZK
int TotalMoves = (1 << height) - 1; *vb"mB
for (i=1; i <= TotalMoves; i++) vIV|y>;g
{ ,Z{\YAh1
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 8b/$Qp4d
{ $bTtD<