車廂排程問題 遞迴演算法

2021-06-26 02:23:26 字數 1151 閱讀 9766

第一篇博文,小激動。

假設停在鐵路排程站入口處的車廂系列的編號依次為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...