題目假設停在鐵路排程站入口處的車廂系列的編號依次為1,2,3,…n。設計乙個程式,求出所有可能由此輸出的長度為n 的車廂系列。
解析:
乙個數的進棧以後,有兩種處理方式:要麼立刻出棧,或者下乙個數的進棧(如果還有下乙個元素)
其出棧以後,也有兩種處理方式:要麼繼續出棧(棧不為空),或者下乙個數的入棧。
該問題有天然的遞迴性質
演算法設計:
兩重遞迴,下乙個元素處理完後返回,再處理出棧的遞迴,有點像巢狀迴圈,但比它複雜...
進棧的遞迴跳出條件為最後乙個元素進棧
出棧的遞迴跳出條件為棧空
附上經典實現**
#include#include#define maxlen 100struct 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這個完全完...