火車進站出站問題

2021-06-20 16:21:48 字數 1101 閱讀 1135

火車編號為:1~9,且不重複。

如:編號分別為「1」、「2」、「3」、「4」、「5」的5個火車順序進站,那麼進站序列為「12345」,全部進站後再順序出站,則出站序列為「54321」,如果先進1,2,然後2出站,然後1出站,然後再3進站、出站,4進站、出站,5進站、出站,那麼出站序列就為21345.

問題分析:

棧具有先進後出、後進先出的特點,因此,任何乙個排程結果應該是1 ,2 ,3 ,4 

全排列中的乙個元素。由於進棧的順序是由小到大的,所以出棧序列應該滿足以下條件:

對於序列中的任何乙個數其後面所有比它小的數應該是倒序的,例如4321 是乙個有效的出棧序列,

1423不是乙個有效的出棧結果(4 後面比它小的兩個數 2 ,3 不是倒序)。

如果要列出所有的出站組合,則可以通過

演算法產生n 個數的全排列,然後將滿足出棧規則的序列輸出。

/*

詳細描述:

int judgetrainsequence (int maxnum, char *poutseq);

輸入引數:

int maxnum:進站的火車最大編號

char* poutseq:使用字串表示火車出站序列

輸出引數(指標指向的記憶體區域保證有效):

無。返回值:

int: 根據輸入的進站序列判斷,如果輸入的出戰序列是可能的,返回1,否則返回0;

*/int judgetrainsequence (int maxnum, char *poutseq)

/* if(poutseq == 0)

*/int length = strlen(poutseq);

int *num = (int *)malloc(length*sizeof(int));

memset(num,0,length);

int i=0;

while(poutseq[i]!='\0')

int j,k;

//從num[0]開始逐個選擇元素

for(j=0;jmax)

}} }

return 1;

}

火車進站問題

給定乙個正整數n代表火車數量,0 比如火車進站 序列問題 c include include include include using std stack using std vector using namespace std bool ispoporder const int put orde...

火車進站問題

描述 給定乙個正整數n代表火車數量,0 知識點棧 執行時間限制 0m記憶體限制0輸入 有多組測試用例,每一組第一行輸入乙個正整數n 0 輸出輸出以字典序排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。樣例輸入 31 2 3 樣例輸出 1 2 3 1 3 2 2 1 3...

火車出站入站問題

include include includeint n,m,j int a 1000 stack 1000 result 1000 int check else while i 2 n flag if j1 0 flag puts int main while a 1 1 printf d n m...