汉诺塔非递归算法.我只是将盘子的数量等于2,3的情况代到网上别人给的算法中验证了一下,没有错。并没有证明算法的正确性。算法是否有效,有待大家证明。 P| ftEF
{4*5Z[
include <iostream> pm2]
#include <stdlib.h> *Ag3qnY
qe/5'dw
#ifdef _WIN32 |h6,.#n
using namespace std; #Q BW%L
#endif "n{JH9sA:
JOyM#g9-?
static void hanoi(int height) <pM6fI6BD
{ $`P]%I}
int fromPole, toPole, Disk; 8!
/ue.T
int *BitStr = new int[height], //用来计算移动的盘的号码 _o&NbDH
*Hold = new int[height]; //用来存贮当前的盘的位置。hold[0]为第一个盘所在的柱号 t"OP*
char Place[] = {'A', 'C', 'B'}; `|mV~F|
int i, j, temp; `JyI`@,!
h@J3+u<
for (i=0; i < height; i++) $01~G?:]`
{ +BE_t(%p"
BitStr = 0; /J9Or{#r
Hold = 1; /S @iF
} _|{Z850AS
temp = 3 - (height % 2); //第一个盘的柱号 K5z<n0X ~
int TotalMoves = (1 << height) - 1; 0}po74x*r
for (i=1; i <= TotalMoves; i++) ?1r<`o3l\
{ A\v53AT
for (j=0 ; BitStr[j] != 0; j++) //计算要移动的盘 uX%$3k
{ @z:E]O}
BitStr[j] = 0; S+*>""=
} 2`A[<