日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POJ 1363 火车厢排队问题(栈)

發布時間:2024/7/5 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1363 火车厢排队问题(栈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://poj.org/problem?id=1363

題目大意:
A站有編號為1到N,N最大1000,的車廂,車廂進入中轉station了就不能回到A,只能停在station內或者進入B站,問能不能按照給定的順序排成那樣的車廂號。

解題:
每次一個新車廂進入station前,檢查棧內棧頂元素是否與B站沒有匹配的車廂頭是否相等(如果有,則彈棧,重復此步驟),沒有匹配的直接入棧。最后棧為空則可以排成給定次序。

舉個例子:(2,1,3,5,4)能不能排成這樣











AC代碼如下:

#include <stack> #include <iostream> #define N 1001 using namespace std; int main() {int Barr[N], i = 0, j = 0, len;while(cin >> len && len) //輸入火車長度{while (1){stack<int> station;for(i = 0; i < len; ++i) //輸入火車B站的車廂順序{cin >> Barr[i]; if(Barr[0] == 0) //第一個車廂是0,結束break;}if(Barr[0] == 0) //第一個車廂是0,結束{break;}for(i = 1, j = 0; i <= len; ++i) //對1-N的車廂進行操作{while(!station.empty() && station.top() == Barr[j]) //中轉站(棧)不為空則,比較棧頂與B的車廂的號碼{station.pop(); //相等的話,車廂出棧j++; //可以比較下一個車廂號碼了}station.push(i); //棧為空或者棧頂車廂號與要求的不等,則直接把A站的車壓入棧內}while(!station.empty() && station.top() == Barr[j]) //當1-N都壓棧完了,棧內還有車廂的話,順次和棧頂比較{station.pop();j++;}if(station.empty()) //最后棧內為空則,可以匹配要求的順序cout << "Yes" << endl;elsecout << "No" << endl;}cout << endl;}return 0; }

總結

以上是生活随笔為你收集整理的POJ 1363 火车厢排队问题(栈)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。