lintcode227 用棧模擬漢諾塔問題

2021-10-02 04:38:00 字數 1456 閱讀 3461

在經典的漢諾塔問題中,有 3 個塔和 n 個可用來堆砌成塔的不同大小的盤子。要求盤子必須按照從小到大的順序從上往下堆 (如,任意乙個盤子,其必須堆在比它大的盤子上面)。同時,你必須滿足以下限制條件:

(1) 每次只能移動乙個盤子。

(2) 每個盤子從堆的頂部被移動後,只能置放於下乙個堆中。

(3) 每個盤子只能放在比它大的盤子上面。

請寫一段程式,實現將第乙個堆的盤子移動到最後乙個堆中。

樣例

樣例1:

輸入: 3

輸出:

towers[0]:

towers[1]:

towers[2]: [2,1,0]

樣例2:

輸入: 10輸出:

towers[0]:

towers[1]:

towers[2]: [9,8,7,6,5,4,3,2,1,0]

class tower

/* * @param d: an integer

* @return: nothing

*/void add(int d)

else}/*

* @param t: a tower

* @return: nothing

*/void movetopto(tower &t)

/* * @param n: an integer

* @param destination: a tower

* @param buffer: a tower

* @return: nothing

*/void movedisks(int n, tower &destination, tower &buffer)

if (n==1)

movedisks

(n-1,buffer,destination)

;movetopto

(destination)

; buffer.movedisks

(n-1,destination,*this);}

/* * @return: disks

*/stackgetdisks()};

/** * your tower object will be instantiated and called as such:

* vectortowers;

* for (int i = 0; i < 3; i++) towers.push_back(tower(i));

* for (int i = n - 1; i >= 0; i--) towers[0].add(i);

* towers[0].movedisks(n, towers[2], towers[1]);

* print towers[0], towers[1], towers[2]

*/

Lintcode 用棧實現佇列

正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。樣例 比如push 1 pop push 2 push 3 top pop 你應該返回1,2和2 挑...

用棧實現佇列 LintCode

正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。樣例 比如push 1 pop push 2 push 3 top pop 你應該返回1,2和2 挑...

lintcode 用棧實現佇列 40

正如標題所述,你需要使用兩個棧來實現佇列的一些操作。佇列應支援push element pop 和 top 其中pop是彈出佇列中的第乙個 最前面的 元素。pop和top方法都應該返回第乙個元素的值。樣例 比如push 1 pop push 2 push 3 top pop 你應該返回1,2和2 挑...