【算法與數據結構】漢諾塔

 

數據結構裏的漢諾塔,遞歸的典型表明,幾乎講到遞歸都會講到漢諾塔,今天才把漢諾塔看明白,慚愧啊。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

相關文章
相關標籤/搜索