題目
編號為1,2,3,4的四列火車通過乙個棧式的列車排程站,可能得到的排程結果有哪些?如果有n列火車通過排程站,請設計乙個演算法,輸出所有可能的排程結果。
分析棧具有先進後出、後進先出的特點,任何乙個排程結果應該是1,2,3,4全排列中的乙個元素。由於進棧的順序是由小到大的,所以出棧序列應該滿足以下條件:對於序列中的任何乙個數其後面所有比它小的數應該是倒序的,例如4321是乙個有效的出棧序列,1423不是乙個有效的出棧結果(4後面比它小的兩個數2,3不是倒序)。據此,本題可以通過演算法產生n個數的全排列,然後將滿足出棧規則的序列輸出。
**
#include
#include
using
namespace std;
int a[
105]
;int n;
// 判斷是否符合出棧順序
bool
judge()
else
else}}
}}return flag;
}// 產生全排列
void
dfs(
int step)
cout << endl;
return;}
for(
int i = step; i <= n; i++)}
intmain()
dfs(1)
;return0;
}
PTA 7 1 列車廂排程(棧的應用)
題目點我 樣例如圖 1 3軌道都可以看成是棧,不論是1軌還是3軌都應該讓棧頂指向車廂在軌道的移動方向 因為棧的優點是在棧頂插入和刪除元素很方便,反過來的話 寫起來會很麻煩 結合圖和題目要求的輸入,兩個輸入都應該逆序入棧 1.先定義乙個標記int flag 1 假定按輸入的排程方式不會出現問題。當出問...
火車排程問題的回溯法解決
問題描述 火車編號為 1 9,且不重複。如 編號分別為 1 2 3 4 5 的5個火車順序進站,那麼進站序列為 12345 全部進站後再順序出站,則出站序列為 54321 如果先進1,2,然後2出站,然後1出站,然後再3進站 出站,4進站 出站,5進站 出站,那麼出站序列就為21345.詳細描述 i...
關於大整數n!的問題!
對於乙個整數n,當n超過30之後,n!將會是乙個比較大的數,而longlong型別將不能儲存下這麼大的數 這是你只能用到高精度的知識,運用陣列來存放這些數,呵呵!看看下面的例子吧!這是一道求1000!的例子,希望能對你有幫助!include using namespace std int main ...