汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 9j49#wG0"B
?%{bMqYJD{
include <iostream> igOjlg_Q
#include <stdlib.h> L=Dd`
5Jp@n .
#ifdef _WIN32 28d:
using namespace std; .oO_x>
#endif =9i:R!,W
R5X<8(4p
static void hanoi(int height) ]Q-ON&/
{ #PVgx9T=_
int fromPole, toPole, Disk; IJD'0/R'c
int *BitStr = new int[height], //用来计算移动的盘的号码 Nj %!N
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 w)&] k#r
char Place[] = {'A', 'C', 'B'}; |D$U{5}Mv
int i, j, temp; Sl:Qq!
N1\u~%AT"
for (i=0; i < height; i++) ]8htJ]<|Q
{ C;oP"K]4=
BitStr = 0; )U>q><
Hold = 1; +VdYT6{p
} isj<lnQ
temp = 3 - (height % 2); //第一个盘的柱号 NlU:e}zGR
int TotalMoves = (1 << height) - 1; 16ke CG\
for (i=1; i <= TotalMoves; i++) q_g'4VZv
{ $T^O3 8$
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 qe"5&