漢諾塔的實現

諸葛倫發表於2015-05-08


/*漢諾塔的演算法就3個步驟:第一,把a上的n-1個盤通過c移動到b。第二,把a上的最下面的盤移到c。第三,因為n-1個盤全在b上了,所以把b當做a重複以上步驟就好了。所以演算法看起來就簡單多了。不過,思考過程還是很痛苦的,難以理解。遞迴中會儲存資料的好處在這裡又得到體現,太神奇了。*/
#include <iostream>
#include<stdio.h>

using namespace std;

void move(int n, char a, char b, char c)
{
 if (n == 1)
  cout << a << c << endl;    //當n只有1個的時候直接從a移動到c
 else
 {
  move(n-1, a, c, b);            //第n-1個要從a通過c移動到b
  cout << a << c << endl;
  move(n-1, b, a, c);            //n-1個移動過來之後b變開始盤,b通過a移動到c,這邊很難理解
 }
}

int main()
{
 int n;
 cout<<"請輸入要移動的塊數:" << endl;
 cin >> n;
 move(n, 'a', 'b', 'c');
 system("pause");
 return(0);

}

相關文章