程式設計與演算法(二)演算法基礎-郭煒 2.1.1 漢諾塔問題
阿新 • • 發佈:2021-02-02
程式設計與演算法(二)演算法基礎-郭煒 2.1.1 漢諾塔問題
古代有一個梵塔﹐塔內有三個座A、B、C,A座上有64個盤子﹐盤子大小不等,大的在下﹐小的在上(如圖)。有一個和尚想把這64個盤子從A座移到c座﹐但每次只能允許移動一個盤子﹐並且在移動過程中﹐3個座上的盤子始終保持大盤在下﹐小盤在上。在移動過程中可以利用B座﹐要求輸出移動的步驟。
#include <iostream>
using namespace std;
void Hanoi(int n,char src,char mid,char dest)
//將src座上的n個盤子,以mid座為中轉,移動dest座
{
if(n == 1) //只需移動一個盤子
{
cout << src << "->" << dest << endl;
//直接將盤子從src移動到dest即可
return ; //遞迴終止
}
Hanoi(n - 1,src,dest,mid); //先將n - 1個盤子從src移動到mid
cout << src << "->" << dest << endl;
//再將一個盤子從src移動到dest
Hanoi(n - 1 ,mid,src,dest); //最後將n - 1個盤子從mid移動到dest
return ;
}
int main()
{
int n;
cin >> n;
Hanoi(n,'A','B','C');
return 0;
}