漢諾塔問題c++
阿新 • • 發佈:2018-11-30
大致題意:
有A、B、C三個盤子用來盛餅,餅的個頭有大有小,沒有大小完全相同的,餅在盤子中必須大個的在下面,小個的放在上面。現在 A 盤中放著 n 張薄餅,需要藉助 B 盤放在 C 盤中
漢諾塔問題步驟:(把A,藉助B,到C)
1)如果只有一個,直接A->C。
2)如果不止一個,將n-1個藉助C,從A->B。
3)再將第n個,從A->C。
4)最後將B中的n-1個,藉助A,從B->C。
程式碼如下:
#include <iostream>
using namespace std;
void hanoi(int n,char source, char relay,char destination)
{
if(n==1) cout<<source<<"->"<<destination<<endl;
else {
hanoi(n-1,source,destination,relay);
cout<<source<<"->"<<destination<<endl;
hanoi(n-1,relay,source,destination);
}
}
int main ()
{
int n;
cin>>n;
cout<<"remove:"<<endl;
hanoi(n,'A','B','C');
return 0;
}
來總結一下:
遞迴演算法不用考慮特別多,當數特別大的時候也考慮不過來,我感覺只需要知道,它的下一步怎麼走就行了,沒有必要層層深入的去考慮走到了哪裡。