汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 Ap
F*a$),
\&eY)^vw
include <iostream> =gMaaGg p,
#include <stdlib.h> ' +)6#/*
`7u\
#ifdef _WIN32 kdK*MUB
using namespace std; SBCL1aM
#endif _/8_,9H
|Q5H9<*
static void hanoi(int height) k9*J*7l-m
{ g)=V#Bglv
int fromPole, toPole, Disk; 4'+d"Ok
int *BitStr = new int[height], //用来计算移动的盘的号码 T4V[RN
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 96.IuwL*.s
char Place[] = {'A', 'C', 'B'}; 4 "pS
int i, j, temp; C$]5l;`
U-Af7qO
for (i=0; i < height; i++) #t"9TP
{ M,b<B_$
BitStr = 0; 9>A-$a4R>
Hold = 1; u~#%P&3_W
} i:l80 GK
temp = 3 - (height % 2); //第一个盘的柱号 Mq+viU&
int TotalMoves = (1 << height) - 1; $?H]S]#|}.
for (i=1; i <= TotalMoves; i++) 2.StG(Y!
{ WafdE
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 ggrI>vaw
{ j G+T.
BitStr[j] = 0; R19'|TJ
} <