PTA 7 1 列車廂排程(棧的應用)

2021-10-25 03:56:42 字數 1589 閱讀 2721

題目點我

樣例如圖:1-3軌道都可以看成是棧,不論是1軌還是3軌都應該讓棧頂指向車廂在軌道的移動方向(因為棧的優點是在棧頂插入和刪除元素很方便,反過來的話**寫起來會很麻煩)。

結合圖和題目要求的輸入,兩個輸入都應該逆序入棧

1.先定義乙個標記int flag = 1;假定按輸入的排程方式不會出現問題。當出問題了再將標記賦為0.

2.以2軌最終狀態為入手點,從第乙個進2軌的到最後乙個進2軌的 逐個遍歷,按上面的①~④進行操作並逐個出棧——直到2軌中的元素全部出棧則代表沒問題,或遇到④情況直接輸出"are you kidding me?"

while

(2軌不空)

elseif(

3軌棧頂 ==

2軌棧頂)

//情況②

elseif(

1軌非空)

//情況④

else

//情況③

}

3.關於輸出:由於在執行完while()迴圈之前你不知道他給出的排程順序是正確的還是錯誤的,如果錯誤就只輸出kidding而不輸出1->2之類的操作序列了,應當把操作序列先存起來(比如用string陣列)最後一塊兒輸出。

#include

#include

#include

using

namespace std;

#define stack_init_size 100

#define incresement 10

typedef

char elemtype;

typedef

int status;

typedef

struct stack stack;

void

stackinit

(stack& s)

void

push

(stack& s, elemtype e)

*s.top = e;

s.top++;}

bool

empty

(stack s)

elemtype pop

(stack& s)

}elemtype top

(stack& s)

}int

main()

for(

int i = b.

size()

-1; i >=

0; i--

)while(!

empty

(s2)

)elseif(

!empty

(s3)

&&top

(s3)

==top

(s2)

)elseif(

empty

(s1)

)else}if

(!flag)

cout <<

"are you kidding me?"

<< endl;

else

}return0;

}

1 4 列車廂排程 25 分

1 移動方向 3 2 移動方向有三條平行的列車軌道 1 2 3 以及1 3和2 3兩段連線軌道。現有一列車廂停在1號軌道上,請利用兩條連線軌道以及3號軌道,將車廂按照要求的順序轉移到2號軌道。規則是 對於給定的1號停車順序,如果經過排程能夠實現2號軌道要求的順序,則給出操作序列 如果不能,就反問使用...

7 6 列車廂排程 25 分

大家或許在某些資料結構教材上見到過 列車廂排程問題 當然沒見過也不要緊 今天,我們就來實際操作一下列車廂的排程。對照上方的ascii字元圖,問題描述如下 有三條平行的列車軌道 1 2 3 以及1 3和2 3兩段連線軌道。現有一列車廂停在1號軌道上,請利用兩條連線軌道以及3號軌道,將車廂按照要求的順序...

1 4 列車廂排程 25分

1 移動方向 3 2 移動方向有三條平行的列車軌道 1 2 3 以及1 3和2 3兩段連線軌道。現有一列車廂停在1號軌道上,請利用兩條連線軌道以及3號軌道,將車廂按照要求的順序轉移到2號軌道。規則是 每次轉移1節車廂 處在1號軌道的車廂要麼經過1 3連線道進入3號軌道 該操作記為 1 3 要麼經過兩...