程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 每天一算法(河內之塔),想起來就復習了下下

每天一算法(河內之塔),想起來就復習了下下

編輯:C++入門知識

如果柱子標為ABC,要由A搬至C,在只有一個盤子時,就將它直接搬至C,當有兩個盤子,就將B當作輔助柱。如果盤數超過2個,將第三個以下的盤子遮起來,就很簡單了,每次處理兩個盤子,也就是:A->B、A ->C、B->C這三個步驟,而被遮住的部份,其實就是進入程式的遞回處理。事實上,若有n個盤子,則移動完畢所需之次數為2^n - 1。


#include <iostream>
#include <cmath>
#include <ctime>
using namespace std;
// 使用RAND_MAX

void hanni(int n,char A,char B,char C)
{
 if (n <0)
 {
  cout<<"n<0"<<endl;
  exit(0);
 }
 else
 {
  if (1 == n)
  {
   printf("從%c移動%d個到%c",A,n,C);
   cout<<endl;
  }
  else
  {
   hanni(n-1,A,C,B);
   hanni(1,A,B,C);
   hanni(n-1,B,A,C);
  }
 }
};
int main(){
 char A = 'a';
 char B = 'b';
 char C = 'c';
 hanni(3,A,B,C);
 return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved