漢偌塔問題


//file 漢諾塔問題.cpp

///////////////////////////////////////////////////////////////
// 漢諾塔問題:
//
// 有三根柱子編號爲1,2,3,其中1號柱上有若干個大小不等的盤子,
// 大的在下,小的在上(從上到下各盤編號分別爲1,2,3,...,n)。
// 現要求將柱1上的盤子全部移到柱3上,在移動的過程中可以藉助於2號柱,
// 但一次只能移動一個盤子,且在移動的過程中三根柱子上的盤子始終保持
// 大盤在下,小盤在上的秩序。
//
// 編寫完成此項任務的函數,並輸出其移動步驟。
///////////////////////////////////////////////////////////////

 


#include"iostream.h"
void hanoi(int n,int x,int y,int z)
{
if(n==1)
  cout<<"將盤"<<n<<"從"<<x<<"柱移到"<<z<<"柱"<<endl;

else{
 hanoi(n-1,x,z,y);
 cout<<"將盤"<<n<<"從"<<x<<"柱移到"<<z<<"柱"<<endl;
 hanoi(n-1,y,x,z);

 }

}

void main(void)
{
int n;
cout<<"輸入盤數:";
cin>>n;
hanoi(n,1,2,3);

}

 

 

 

 

//漢偌塔問題中的棧狀態及遞歸執行層次.cpp

#include<iostream>
using namespace std;

void move(char x,int n,char z)
{
 cout<<"move No."<<n<<" from "<<x<<" to "<<z<<endl;
}

        void hanoi(int n, char x,char y,char z)
/* 1 */{                             
 
/* 2 */ if(n==1)              
  
/* 3 */     move(x,1,z);         
 
/* 4 */ else{                   
  
/* 5 */     hanoi(n-1,x,z,y);     
  
/* 6 */     move(x,n,z);          
  
/* 7 */     hanoi(n-1,y,x,z);     
 
/* 8 */  }                          

/* 9 */ }                             

 


void main(void)
{
      int num;
      cout<<"input the number of the plates to move:";
      cin>>num;
      hanoi(num,'X','Y','Z');
/* 0 */}                             

 

 

 

 

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章