hanoi塔問題C++實現

#include<iostream>
using namespace std;
//hanoi塔問題
/*
時間複雜度
設n個盤子的移動次數爲T(n)
T(n)=2T(n-1)+1
T(1)=1
T(n)=2^n-1
*/
void move(char A,char B,int n) {
	cout<<"第"<<n<<"個盤子從"<<A<<"-->"<<B<<endl;
}

void hanoi(char A,char B,char C,int n) {
	//將n個盤子藉助B盤,從A盤上挪到C盤上
	if(n==1) move(A,C,n);
	else {
		hanoi(A,C,B,n-1);//將n-1個盤子藉助C盤,從A盤上挪到B盤上
		move(A,C,n);
		hanoi(B,A,C,n-1);//將n-1個盤子藉助A盤,從B盤上挪到C盤上
	}
}

//測試
int main() {
	int n;
	char A,B,C;
	cin>>n>>A>>B>>C;
	hanoi(A,B,C,n);
	return 0;

}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章