汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 ;q6:*H/
^uMy|d
include <iostream> 9vmH$
#include <stdlib.h> uz&CUvos
R6h(mPYA
#ifdef _WIN32 8PDt 7
\
using namespace std; O!hg@[\B+
#endif p` B48TW
'vhgR2/
static void hanoi(int height) |UZ#2
{ ]B:g<}5$4
int fromPole, toPole, Disk; p;"pTGoWi
int *BitStr = new int[height], //用来计算移动的盘的号码 E&#AX:
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 vy,ER<
char Place[] = {'A', 'C', 'B'}; FaPX[{_E
int i, j, temp; m%+W{N4Wb
0 4x[@f`
for (i=0; i < height; i++) C^aP)&
qt
{ QSW03/_f
BitStr = 0; 1[[`
^v
Hold = 1; u<]-%ha$
} TCX*$ac"
temp = 3 - (height % 2); //第一个盘的柱号 &0It"17Ej
int TotalMoves = (1 << height) - 1; @7"xDgA
for (i=1; i <= TotalMoves; i++) eq<xO28z
{ "k)( ,
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 mF%>pj&