汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 ._j?1Fw`
xbw;s}B
include <iostream> q>K3a1x
#include <stdlib.h> XaE*$:
Z-4/xi7
#ifdef _WIN32 Q6URaw#Yt`
using namespace std; )i.pE]!+
#endif ?MSwr_eZH
~ehN%-
static void hanoi(int height) A:y^9+Da
{ `_1fa7,z
int fromPole, toPole, Disk; x%H,ta%
int *BitStr = new int[height], //用来计算移动的盘的号码 x\ #K2
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 p>J@"?%^
char Place[] = {'A', 'C', 'B'}; l44QB8
9
int i, j, temp; 6A=k;do
2#yDVN$
for (i=0; i < height; i++) P"}"q ![
{ ep},~tPZn
BitStr = 0; V8WSJ=-&
Hold = 1; Z*b l J5YC
} [+W<;iep
temp = 3 - (height % 2); //第一个盘的柱号 X-"
+nThMn
int TotalMoves = (1 << height) - 1; N}#"o
for (i=1; i <= TotalMoves; i++) icIWv
{ C .B=E"e
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 ^yl}/OD
{ /%jX=S.5h<
BitStr[j] = 0; ^^!G{*F
} :eL[nyQr
BitStr[j] = 1; y<nPZ<