【算法与数据结构】汉诺塔

 

数据结构里的汉诺塔,递归的典型表明,几乎讲到递归都会讲到汉诺塔,今天才把汉诺塔看明白,惭愧啊。ios

不废话了,贴代码,基本思想在注释里有,话说往CNBLOG首页投了两次,两次都被小编给扯下来了,此次就不投了。数据结构

 

 1 // Hanoi.cpp : 定义控制台应用程序的入口点。  2 //  3  4 #include "stdafx.h"  5 #include <iostream>  6 using namespace std;  7  8 /************************************************************************/  9 /* 三根柱子x, y, z, n个盘子,从小到大依次编号为1--n,全部盘子如今都在 10  x柱子上,如今须要从x柱子移动到z柱子 11  若是n==1则问题很简单,只须要将盘子从x柱子移动到z柱子, 12  不然,须要将上面n-1个盘子从x柱子借助z柱子移动到y柱子,而后将盘子n从x柱子 13  移动到z柱子,再将y柱子上的n-1个盘子从y柱子借助x柱子移动到z柱子 14 15 /************************************************************************/ 16 void Move(int n, int a, int b) 17 { 18 cout<<"\r\n----------- "<<"将盘子 "<<n<<" 从柱子 "<<a<<" 移动到柱子 "<<b<<endl; 19 } 20 21 //将n个盘子从x借助y移动到z 22 void Hanoi(int n, int x, int y, int z) 23 { 24 //若是只有一个盘子,将此盘子从x直接移动到z 25 if (1 == n) 26  { 27 Move(1, x, z); 28  } 29 else 30  { 31 //将上面的n-1个盘子从x借助z移动到y 32 Hanoi(n - 1, x, z, y); 33 34 //将盘子n从x直接移动到z 35  Move(n, x, z); 36 37 //将y上的n-1个盘子从y借助x移动到z 38 Hanoi(n - 1, y, x, z); 39  } 40 } 41 42 int _tmain(int argc, _TCHAR* argv[]) 43 { 44 Hanoi(5, 1, 2, 3); 45 46 return 0; 47 }

 

 

 

知道为何Hanoi盘子个数给了4个吗? 由于给3个显得太少,给5个嘛,就显示不全啦!spa

相关文章
相关标签/搜索