7-5 列车厢调度 (25 分)
7-5 列車(chē)廂調(diào)度 (25 分)
1 ====== <--移動(dòng)方向/ 3 ===== \2 ====== -->移動(dòng)方向大家或許在某些數(shù)據(jù)結(jié)構(gòu)教材上見(jiàn)到過(guò)“列車(chē)廂調(diào)度問(wèn)題”(當(dāng)然沒(méi)見(jiàn)過(guò)也不要緊)。今天,我們就來(lái)實(shí)際操作一下列車(chē)廂的調(diào)度。對(duì)照上方的ASCII字符圖,問(wèn)題描述如下:
有三條平行的列車(chē)軌道(1、2、3)以及1-3和2-3兩段連接軌道。現(xiàn)有一列車(chē)廂停在1號(hào)軌道上,請(qǐng)利用兩條連接軌道以及3號(hào)軌道,將車(chē)廂按照要求的順序轉(zhuǎn)移到2號(hào)軌道。規(guī)則是:
每次轉(zhuǎn)移1節(jié)車(chē)廂;
處在1號(hào)軌道的車(chē)廂要么經(jīng)過(guò)1-3連接道進(jìn)入3號(hào)軌道(該操作記為"1->3"),要么經(jīng)過(guò)兩條連接軌道直接進(jìn)入2號(hào)軌道(該操作記為"1->2");
一旦車(chē)廂進(jìn)入2號(hào)軌道,就不可以再移出該軌道;
處在3號(hào)軌道的車(chē)廂,只能經(jīng)過(guò)2-3連接道進(jìn)入2號(hào)軌道(該操作記為"3->2");
顯然,任何車(chē)廂不能穿過(guò)、跨越或繞過(guò)其它車(chē)廂進(jìn)行移動(dòng)。
對(duì)于給定的1號(hào)停車(chē)順序,如果經(jīng)過(guò)調(diào)度能夠?qū)崿F(xiàn)2號(hào)軌道要求的順序,則給出操作序列;如果不能,就反問(wèn)用戶(hù) Are(你) you(是) kidding(凱丁) me(么)?
輸入格式:
兩行由大寫(xiě)字母組成的非空字符串,第一行表示停在1號(hào)軌道上的車(chē)廂從左到右的順序,第二行表示要求車(chē)廂停到2號(hào)軌道的進(jìn)道順序(輸入樣例1中第二行CBA表示車(chē)廂在2號(hào)軌道的停放從左到右是ABC,因?yàn)镃最先進(jìn)入,所以在最右邊)。兩行字符串長(zhǎng)度相同且不超過(guò)26(因?yàn)橹挥?6個(gè)大寫(xiě)字母),每個(gè)字母表示一節(jié)車(chē)廂。題目保證同一行內(nèi)的字母不重復(fù)且兩行的字母集相同。
輸出格式:
如果能夠成功調(diào)度,給出最短的操作序列,每個(gè)操作占一行。所謂“最短”,即如果1->2可以完成的調(diào)度,就不要通過(guò)1->3和3->2來(lái)實(shí)現(xiàn)。如果不能調(diào)度,輸出 “Are you kidding me?”
輸入樣例1:
ABC
CBA
輸出樣例1:
1->3
1->3
1->2
3->2
3->2
輸入樣例2:
ABC
CAB
輸出樣例2:
Are you kidding me?
坑點(diǎn):在對(duì)比1棧(起始軌道)和re數(shù)組(目標(biāo)軌道)時(shí),遇到相同的就移到目標(biāo)軌道,否則移入3棧暫存,當(dāng)從1棧開(kāi)始移動(dòng)時(shí),只有兩個(gè)選擇:
- 移動(dòng)到2棧,即目標(biāo)棧
- 移動(dòng)到3棧,即暫存棧
當(dāng)暫存棧符合re數(shù)組的要求時(shí),一定要用while循環(huán)(任意類(lèi)型循環(huán)都行,只需要控制好條件)將所有符合的字符全部pop出來(lái),不然很可能出現(xiàn)遺漏問(wèn)題(測(cè)試點(diǎn)2),例如:
ABCDEF
CDBAEF
左側(cè)為正確答案
總結(jié)
以上是生活随笔為你收集整理的7-5 列车厢调度 (25 分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 牛客网--称砝码
- 下一篇: Leetcode--5081. 步进数