漢諾塔問題發源于古老的梵天寺之塔儀式,傳說當世界誕生的時候,有一座摞了64個黃金碟子的鉆石塔(記為A塔)。碟子按從大到小的次序自底向上地摞在塔上。除此之外還有兩個鉆石塔(記為B和C塔),從世界誕生之日開始,梵天寺的僧侶們就通過塔C將碟子從A塔搬到B塔,但每次只能搬一個碟子,并且任何時候都不能大的碟子在上小碟子在下。根據傳說,當僧侶完成任務是就是世界毀滅之時。
這個問題可以用遞歸來解決。假設碟子數是n個,為了將最大的第n個從A搬到B,需要先將剩下的n-1個碟子搬到C上,我們需要解決的問題就是如何將塔C上的碟子搬到塔B上。此時我們可以用塔A和B,可以先不管B上已有的碟子,因為它是最大的,其他碟子都可以放在它上面。這時就可以用遞歸算法。改程序首次調用是TowersOfHanio(n,A,B,C).即將一個搬運n個碟子的問題轉換為兩個搬動n-1個碟子的問題。
#include<iostream>enum tower{A = 'A',B = 'B',C = 'C'};void TowersOfHanoi(int n,tower X,tower y,tower z)//從塔x的頂部移動n個碟子到塔y { if(n) { TowersOfHanio(n-1,x,z,y); cout<<"move top disk from tower"<<char(x)<<"to top of tower"<<char(y)<<endl; TowersOfHanio(n-1,z,y,x); } }
新聞熱點
疑難解答
圖片精選