車廂排程問題解析(經典遞迴)

2021-08-30 04:52:43 字數 937 閱讀 9277

題目假設停在鐵路排程站入口處的車廂系列的編號依次為1,2,3,…n。設計乙個程式,求出所有可能由此輸出的長度為n 的車廂系列。

解析:

乙個數的進棧以後,有兩種處理方式:要麼立刻出棧,或者下乙個數的進棧(如果還有下乙個元素) 

其出棧以後,也有兩種處理方式:要麼繼續出棧(棧不為空),或者下乙個數的入棧。

該問題有天然的遞迴性質

演算法設計:

兩重遞迴,下乙個元素處理完後返回,再處理出棧的遞迴,有點像巢狀迴圈,但比它複雜...

進棧的遞迴跳出條件為最後乙個元素進棧

出棧的遞迴跳出條件為棧空

附上經典實現**

#include#include#define   maxlen   100   

struct snodes;//定義乙個棧指標

int n;//定義輸入序列總個數

void initstack()

void push(int q)//元素n進棧

int pop()//出棧

int emptys()//判斷棧空

/*每次呼叫求值階段包含兩重遞迴,只有全部返回,才表示本pos 處理完,可以對上乙個元素求值,process 就是找出當前元素進棧後所有可能的操作,即在當前元素進棧後各種情況下,

包括不出棧,立即出棧,出棧後繼續出棧情況(出棧遞迴)下,繼續處理下乙個元素(入棧遞迴)

*/void process(int pos,int path,int curp)//當前處理位置pos的元素

if(!emptys())//遞迴處理出棧

if(pos==n&&emptys())//輸出一種可能的方案

}

void main()

題解 車廂排程

有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c...

車廂排程問題 遞迴演算法

第一篇博文,小激動。假設停在鐵路排程站入口處的車廂系列的編號依次為1,2,3,n。設計乙個程式,求出所有可能由此輸出的長度為n 的車廂系列。車廂排程問題的每次操作都有兩種選擇 車廂進排程站 車廂直接出站。因此,一種顯而易見的解法是遞迴模擬車廂的排程過程,得到所有可能的輸出序列。設定兩個棧 s1 代表...

鐵路車廂排程問題

鐵路車廂排程問題。圖 1 是乙個鐵道調車場的示意圖,兩側鐵道均為單向行駛 道,中間有一段用於排程的 棧道 調車場的入口處有 n 節硬座和軟座車廂 分 別用 h 和 s 表示 設計乙個演算法,把所有的軟座車廂排程到硬座車廂前面來,要求輸出對這 n 節車廂進行排程的 車廂編號 結果序列。hhh這個完全完...