漢諾塔原理解析:
當只有一個盤子的時候,只需要從將A塔上的一個盤子移到C塔上。
當A塔上有兩個盤子是,先將A塔上的1號盤子(編號從上到下)移動到B塔上,再將A塔上的2號盤子移動的C塔上,最後將B塔上的小盤子移動到C塔上。
當A塔上有3個盤子時,先將A塔上編號1至2的盤子(共2個)移動到B塔上(需藉助C塔),然後將A塔上的3號最大的盤子移動到C塔,最後將B塔上的兩個盤子藉助A塔移動到C塔上。
當A塔上有n個盤子是,先將A塔上編號1至n-1的盤子(共n-1個)移動到B塔上(藉助C塔),然後將A塔上最大的n號盤子移動到C塔上,最後將B塔上的n-1個盤子藉助A塔移動到C塔上。
綜上所述,除了只有一個盤子時不需要藉助其他塔外,其餘情況均一樣。
- <span style="font-size:14px;">#include <iostream>
- using namespace std;
- int hannuota(int n,string a,string b,string c)
- {
- if(n==1)
- {
- //只有一個盤子的情況下直接將第一個塔上的盤子移動到第三個塔
- printf("塔%s------>塔%s\n",a.c_str(),c.c_str());
- }
- else{
- //1.先將第一個塔的n-1個盤子全部通過第三個塔移動到第二個塔上
- hannuota(n-1,a, c, b);
- //2.再將剩下的一個盤子移動到第三個塔上
- printf("塔%s------>塔%s\n",a.c_str(),c.c_str());
- //3.最後將第二個塔上的盤子通過第一個塔移動到第三個塔上
- hannuota(n-1, b, a, c);
- }
- return 1;
- }
- int main(int argc, const char * argv[]) {
- printf("請輸入盤子的數量:\n");
- int n;
- scanf("%d",&n);
- printf("盤子移動如下:\n");
- hannuota(n,"A","B","C");
- return 0;
- }</span>