數據結構回顧(五)漢諾塔 (C/C++)

挺有意思的問題,記得還是大一學數據結構遞歸章節時寫的。解決思想是分治,策略是將複雜的問題不斷的進行分割迭代簡單化;要求n個盤的移動過程可以先求n-1個盤的移動,不斷迭代直到最後一個盤的移動。其中要經歷將A柱的盤藉助B柱移動到C柱,當然每次隨着盤子所處位置以及目標柱子的不同會有柱子序的交換(在代碼層面)。
代碼如下:(因爲實際的漢諾塔問題規模並不是個人PC能夠短時間內計算出來的,在此採用的是自己輸入問題規模,記得測試的時候輸入的是個位數盤數,比如num=5)

#include<iostream>
#include<windows.h>
using namespace std;
//記錄移動次數
int num1=0;
void move(char pillersource,int num,char pillertarget)
{
	cout<<pillersource<<num<<"移動到"<<pillertarget<<endl;
	num1++;

}
void hanoi(int num,char pill1,char pill2,char pill3)
{
	if(num==1)
		move(pill1,1,pill3);
	else
	{
		hanoi(num-1,pill1,pill3,pill2);
		move(pill1,num,pill3);
		hanoi(num-1,pill2,pill1,pill3);
	
	}
}
void startmove()
{
	cout<<"請輸入盤數:"<<endl;
	int num;
	cin>>num;
	hanoi(num,'A','B','C');
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章