第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題

Curtis_發表於2019-03-06

遞迴經典問題——漢諾塔問題:

1-N從A移動到B,C作為輔助:

    等價於:

         1、1~N-1從A移動到C,A作為源,B作為輔助;

         2、把N從A移動到B;

         3、1~N-1從C移動到B,A作為輔助。

#include<iostream>
using namespace std;
/*
**將N個盤子從source移動到target的路徑列印 
**
**N: 初始的N個從小到大的盤子,N為最大編號 
**from: 原始柱子 
**to: 目標柱子 
** help: 輔助柱子 
*/

void printHanoiTower(int N,string from,string to,string help){
	if(N==1){
		cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl;
		return;
	} 
	
	printHanoiTower(N-1,from,help,to);      //先把前N-1個盤子挪到輔助空間去 
	cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl;    //N可以順利地到達target 
	printHanoiTower(N-1,help,to,from);    //讓N-1從輔助空間挪到目標空間 
}
int main(){
	printHanoiTower(3,"A","B","C");
	
	return 0;
}

注:將前n-1個盤子看做整體。

 

 結果:

相關文章