汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 JxinfWk
|aLK_]!
include <iostream> ei4LE
XQ16
#include <stdlib.h> U^KWRqt
!!Ww#x~k$[
#ifdef _WIN32 xF{%@t
using namespace std; iz=cjmV?
#endif '/<\X{l8
"a2|WKpD
static void hanoi(int height) #8h7C8]&
{ DyqqY$ vH(
int fromPole, toPole, Disk; -]^JaQw
int *BitStr = new int[height], //用来计算移动的盘的号码 fof}I:vO
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 Y#c439 &
char Place[] = {'A', 'C', 'B'}; MtL<)?HQ
int i, j, temp; kS_#8I
8$~oiK%fw
for (i=0; i < height; i++) zd%f5L('
{ ;)h?P.]
BitStr = 0; F?'
Hold = 1; r5xm7- `c
} I8!>7`L
temp = 3 - (height % 2); //第一个盘的柱号 G%HG6
int TotalMoves = (1 << height) - 1; ^S`hKv&87
for (i=1; i <= TotalMoves; i++) f#&z