第一篇博文,小激動。
假設停在鐵路排程站入口處的車廂系列的編號依次為1,2,3,…n。設計乙個程式,求出所有可能由此輸出的長度為n 的車廂系列。
車廂排程問題的每次操作都有兩種選擇:①車廂進排程站②車廂直接出站。因此,一種顯而易見的解法是遞迴模擬車廂的排程過程,得到所有可能的輸出序列。
設定兩個棧
s1:代表車廂初始狀態所在的鐵軌
s2:代表排程站
設定乙個陣列
list:儲存車廂的輸出序列
每次排程抽象為乙個遞迴方法onestep,遞迴出口為s1 s2均為空的狀態
首先自定義乙個棧,考慮到通用程式設計,使用了模板
*****stack.h*****
#pragma once
#includeusing namespacestd;
templateclass stack
bool isempty()const
bool isfull()const
t top()const;
stack&add(constt&x);
stack&delete(t&x);
private:
int top;
int maxtop;
t*stack;};
templatestack::stack(intmaxstacksize)
templatet stack::top()const
templatestack&stack::add(constt& x)
templatestack&stack::delete(t&x)
****main.cpp****
#include #include "stack.h"
using namespacestd;
templatevoid onestep(stack&s1, stack& s2,int *list,int count,int listsize)
//注意 s1,s2必須為引用!!!!保持其唯一性!!!!
if (!s2.isempty())//當原堆疊和中專堆疊都為空時,輸出list
if (s1.isempty() &&s2.isempty())
車廂排程問題解析(經典遞迴)
題目假設停在鐵路排程站入口處的車廂系列的編號依次為1,2,3,n。設計乙個程式,求出所有可能由此輸出的長度為n 的車廂系列。解析 乙個數的進棧以後,有兩種處理方式 要麼立刻出棧,或者下乙個數的進棧 如果還有下乙個元素 其出棧以後,也有兩種處理方式 要麼繼續出棧 棧不為空 或者下乙個數的入棧。該問題有...
鐵路車廂排程問題
鐵路車廂排程問題。圖 1 是乙個鐵道調車場的示意圖,兩側鐵道均為單向行駛 道,中間有一段用於排程的 棧道 調車場的入口處有 n 節硬座和軟座車廂 分 別用 h 和 s 表示 設計乙個演算法,把所有的軟座車廂排程到硬座車廂前面來,要求輸出對這 n 節車廂進行排程的 車廂編號 結果序列。hhh這個完全完...
題解 車廂排程
有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 1000 分別按照順序編號為1,2,3,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c...