汉诺塔-递归算法和非递归算法

递归算法:

x->y    z 为临时塔

void move(unsigned int x, unsigned int y) { printf("%d->%d,", x, y); } void TowersOfHanoi(int n, int x, int y, int z) { if (n > 0) { TowersOfHanoi(n-1, x, z, y); move(x,y); TowersOfHanoi(n-1, z, y, x); } }

 

非递归算法:

x->z    y 为临时塔

 struct HANOI_NODE { int n; unsigned int x, y, z; }; void move(unsigned int x, unsigned int y) { printf("%d->%d,", x, y); } void Hanoi_1(const HANOI_NODE& h) { Stack<HANOI_NODE> s; HANOI_NODE v(h); while(v.n > 0 || !s.IsEmpty()) { if(v.n > 0) { s.Add(v); --v.n; swap(v.y, v.z); } else { s.Delete(v); move(v.x, v.z); --v.n; swap(v.x, v.y); } } }

你可能感兴趣的:(算法,struct)