題目點我
樣例如圖: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 要麼經過兩...