車廂排程問題 佇列和棧的實現

2021-09-27 10:10:11 字數 2609 閱讀 8644

根據佇列和棧的性質

佇列找尾部最大的車廂號

棧找尾部最小的車廂號

棧、佇列、陣列可用stl或者自己實現

#pragma once

#include "vector.h"

#include "queue.h"

#include "stack.h"

#include const char* inputvectorfilename = "carriagesrearrangement.txt";

const char* resultfile = "carriagesresult.txt";

templateconst int calculatek(vector& v)

} return k;

}void generatetestdata(const char* filename, const int &n)

for (int i = 0; i < n; ++i)

for (int i = 0; i < n; ++i)

fout.close(); }}

templatevoid inputvectorfromfile(vector& v, const char* filename)

v.reverse();

fin.close(); }}

vectorcarriagesrearrangement_queue(vector&carriages, const int k, const char* filename)

queue*buffer = new queue[k]; // 緩衝車廂

vectorarrangedcarriages; // 排序後的車廂

arrangedcarriages.push_back(0); // 加入乙個頭節點

// i和j用於迴圈

int i = null, j = null;

// n記錄車廂總長

int n = carriages.size();

// temp記錄第i節車廂

int temp = null;

// max和tag記錄最大的車廂及其編號

int max = null, tag = null;

for (i = 0; i < n; ++i)

max = 0;

tag = 0;

/**如果不滿足上面的條件

*在尾部車廂號最大的車廂後面插入

*否則找乙個新的緩衝軌插入

*/for (j = 0; j < k; ++j)

else

}// 用來找比當前車廂號大的最大車廂號

if (buffer[j].back() < temp) }}

} bool correcttag = false;

// 退隊過程

while (arrangedcarriages.size() <= n)

}if (!correcttag)

} arrangedcarriages.erase(0); // 刪除頭節點

fout.close();

return arrangedcarriages.reverse();

} return carriages;

}vectorcarriagesrearrangement_stack(vector&carriages, const int k, const char* filename)

stack*buffer = new stack[k]; // 緩衝車廂

vectorarrangedcarriages; // 排序後的車廂

arrangedcarriages.push_back(0); // 加入乙個頭節點

// i和j用於迴圈

int i = null, j = null;

// n記錄車廂總長

int n = carriages.size();

// temp記錄第i節車廂

int temp = null;

// min和tag記錄最小的車廂及其編號

int min = null, tag = null;

for (i = 0; i < n; ++i)

min = n + 1;

tag = 0;

/**如果不滿足上面的條件

*在尾部車廂號最小的車廂後面壓入

*否則找乙個新的緩衝軌壓入

*/for (j = 0; j < k; ++j)

else

}// 用來找比當前車廂號小的最小車廂號

if (temp < buffer[j].top()) }}

} bool correcttag = false;

// 出棧過程

while (arrangedcarriages.size() <= n)

}if (!correcttag)

} arrangedcarriages.erase(0); // 刪除頭節點

fout.close();

return arrangedcarriages.reverse();

} return carriages;

}void carriagestest()

驗證棧的序列 車廂排程

做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多 時間限制 1000 ms 記憶體限制 65536 kb 提交數 8476 通過數 4298 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 10...

驗證棧的序列 車廂排程

做題的過程中,我們可以一題多解,多題一解,來比較題的差異,從而收穫很多 時間限制 1000 ms 記憶體限制 65536 kb 提交數 8476 通過數 4298 題目描述 有乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節 n 10...

棧和佇列的手動實現 用棧實現佇列 用佇列實現棧

1 用陣列結構實現大小固定的棧和佇列 1 棧 public static class arraystack arr new integer initsize size 0 public integer peek 返回棧頂元素但並不讓元素出棧 return arr size 1 public void...