鐵軌問題 棧的運用

2021-07-26 14:09:07 字數 1118 閱讀 2390

是這幾天學習紫書遇到的乙個問題 之前在學校的時候嘗試著做過

題目如下

自己大概知道是這麼個意思 c就相當於乙個棧 進去的車廂只能倒著出來 後進去的就先出來

**裡不精 還是照著書上的打了一遍 花了乙個下午理解了

#include

#include

using

namespace

std;

const

int maxn = 1000 + 10;

int n, target[maxn];

int main()

else

if (!s.empty() && s.top() == target[b])

else

if (a <= n)s.push(a++);

else

}printf("%s\n", ok ? "yes" : "no");

}return

0;}

之所以之前未理解到是因為自己一直只想到了用兩個容器 自然就不懂乙個棧和a居然還有個b

自己理解一遍大概是這樣target陣列中存放的是出去後的火車隊 判斷進站前按照12345順序的火車是否可以通過乙個站台c(棧)來實現出去的火車隊

關鍵就是這三個判斷語句

如果a(當前進站的火車頭)等於target【b】(當前應該出站的火車頭)那麼他們是可以實現的 跳過然後判斷下乙個進站的火車頭和下乙個應該出站的火車頭

如果不相等 判斷下一條語句

如果棧c不為空並且棧頂元素就等於當前應該出站的火車號的話 那麼就讓它出棧出站 然後判斷下乙個

如果不滿足這個條件 則繼續下乙個判斷

加如a(當前進站車廂的號)小於等於n(車廂數量) 也就是說棧頂的元素不能出站滿足條件 當前可以進站的元素也不滿足條件 那就只有讓它進棧了

否則—如果連進棧的機會都沒有了(所以進站的車廂都在棧裡或者出站了) 那麼前面又沒有滿足條件出站的車廂 那麼就已經不能滿足題目條件了 直接break;跳出迴圈就可以了

棧的幾個主要操作是可以應用了 只是運用在做題裡對我而言還有難度

資料結構鐵軌問題 stack 鐵軌問題

每輛火車都從a方向駛入車站,再從b方向駛出車站,同時它的車廂可以進行某種形式的重新組合。假設從a方向駛來的火車有n節車廂 n 1000 分別按順序編號為1,2,n。假定在進入車站之前每節車廂之間都是不連著的,並且它們可以自行移動,直到處在b方向的鐵軌上。另外假定車站c裡可以停放任意多節的車廂。但是一...

UVa 514 鐵軌 棧的學習

題目 鐵軌 題目描述 某城市有乙個火車站,有n節車廂從a方向駛入車站,按進站的順序編號為1 n.你的任務是判斷是否能讓它們按照某種特定的順序進入b方向的鐵軌並駛入車站。例如,出棧順序 5 4 1 2 3 是不可能的,但是 5 4 3 2 1 是可能的。題目分析 為了重組車廂,借助中轉站,對於每個車廂...

UVa 514 鐵軌 棧的學習

題目 鐵軌 題目描述 某城市有乙個火車站,有n節車廂從a方向駛入車站,按進站的順序編號為1 n.你的任務是判斷是否能讓它們按照某種特定的順序進入b方向的鐵軌並駛入車站。例如,出棧順序 5 4 1 2 3 是不可能的,但是 5 4 3 2 1 是可能的。題目分析 為了重組車廂,借助中轉站,對於每個車廂...