日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

7-5 列车厢调度 (25 分)

發(fā)布時(shí)間:2024/7/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-5 列车厢调度 (25 分) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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?

#include <bits/stdc++.h> using namespace std; int main() {int i=0,flag=0;stack<char>a,b;char st[100],re[100];while ((st[i]=getchar())!='\n'){i++;}st[i]='\0';for (int i=strlen(st)-1;i>=0;i--){a.push(st[i]);}i=0;while ((re[i]=getchar())!='\n'){i++;}re[i]='\0';int k=0;while (k!=strlen(re)){if (!a.empty()&&a.top()!=re[k]) //移入3暫存 {b.push(a.top());a.pop();}else if (!a.empty()&&a.top()==re[k]) //直接移入2 {a.pop();k++;}while (!b.empty()&&b.top()==re[k]) //從暫存中提取 {b.pop();k++;}if (a.empty()&&!b.empty()&&b.top()!=re[k]){break;}}if (k==strlen(re)){flag=1;}while (!a.empty()) a.pop();while (!b.empty()) b.pop();k=0;for (int i=strlen(st)-1;i>=0;i--){a.push(st[i]);} // flag=1;if (flag==0){printf("Are you kidding me?\n");return 0;}if (flag==1){while (k<strlen(re)){while (!b.empty()&&b.top()==re[k]) //從暫存中提取 {printf("3->2\n");b.pop();k++;}if (!a.empty()&&a.top()==re[k]) //直接移入2 {printf("1->2\n");a.pop();k++;}else if (!a.empty()&&a.top()!=re[k]) //移入3暫存 {printf("1->3\n");b.push(a.top());a.pop();}if (a.empty()&&!b.empty()&&b.top()!=re[k]){break;}}}return 0; }

坑點(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。