diff --git a/ex8/ex8.cpp b/ex8/ex8.cpp index e72d671..4c33f30 100644 --- a/ex8/ex8.cpp +++ b/ex8/ex8.cpp @@ -1,13 +1,13 @@ #include "queue.hpp" #include #include -#define JIE 6 +#define JIE 10 class Train { private: - int _v[6]; - Queue come; + int _v[10]; + Queue come[2]; Queue temp[4]; Queue out; @@ -21,10 +21,18 @@ public: for (int i = 0; i < JIE; i++) swap(i, rand() % JIE); printf("入队序列: \n"); - for (int i = 0; i < JIE; i++) + printf("#1到达轨 "); + for (int i = 0; i < 5; i++) { - come.enqueue(_v[i]); - printf("%d ", _v[i]); + come[0].enqueue(_v[i]); + printf("%2d ", _v[i]); + } + printf("\n"); + printf("#2到达轨 "); + for (int i = 5; i < 10; i++) + { + come[1].enqueue(_v[i]); + printf("%2d ", _v[i]); } printf("\n"); } @@ -32,20 +40,37 @@ public: bool orgnize() { int j = 0; - while (!come.empty()) + while (!come[1].empty() || !come[0].empty()) { for (int i = 0; i < 4;) { - if (temp[i].back() < come.front()) + if (temp[i].back() < + (come[1].front() < come[0].front() ? + (come[1].front() ? come[1].front() : come[0].front()) : + (come[0].front() ? come[0].front() : come[1].front()))) { - printf("%d号车厢推入#%d缓冲轨 \n", come.front(), i + 1); - temp[i].enqueue(come.dequeue()); + printf("%2d号车厢由#%d到达轨推入#%d缓冲轨 \n", + + (come[1].front() < come[0].front() ? + (come[1].front() ? come[1].front() : come[0].front()) : + (come[0].front() ? come[0].front() : come[1].front())), + + (come[1].front() < come[0].front() ? + (come[1].front() ? 2 : 1) : + (come[0].front() ? 1 : 2)), + + i + 1); + + temp[i].enqueue( + (come[1].front() < come[0].front() ? + (come[1].front() ? come[1].dequeue() : come[0].dequeue()) : + (come[0].front() ? come[0].dequeue() : come[1].dequeue()))); } else { j++; i++; - if (j > 20) + if (j > 100) return false; } } @@ -56,11 +81,11 @@ public: { for (int i = 1; i <= JIE;) { - for (int j = 0; j < 4;j++) + for (int j = 0; j < 4; j++) { - if(temp[j].front()==i) + if (temp[j].front() == i) { - printf("%d号车厢经#%d缓冲轨推入出发区,出发队列为 ", j+1,temp[j].front()); + printf("%2d号车厢经#%d缓冲轨推入出发区,出发队列为 ", temp[j].front(), j + 1); out.enqueue(temp[j].dequeue()); for (int i = 0; i < out.size(); i++) printf("%d ", out[i]); @@ -73,8 +98,6 @@ public: return 0; } - - protected: void swap(int a, int b) { @@ -86,7 +109,6 @@ protected: int main() { - Train T; T.orgnize() ? T.Out() : printf("编组失败\n"); return 0;