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;

}


 

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