[ 火车车厢重排问题 ] 编号为1至N的N个货运车厢需要编组,在进入编 组区前,这些车厢是随机排列的。在编组区里,需要将运货的各节车厢 从大到小排好。驶离编组区后直接挂接火车车头,编组区现有3条空轨道 可供使用。请完善下列代码: bool realign(queue<int> track) //track中存放进编组区前的各车厢编 号。返回值true表示可以完成重组;false表示不可以完成。 { int x; queue< [填空1]> track1, track2, track3; while (!track.empty()) { x= [填空2]; track.pop(); if (track1.empty() || x > [填空3]) track1.push(x); else if (track2.empty() || x > [填空4] ) track2.push(x); else if (track3.empty() || x > [填空5] ) track3.push(x); else return [填空6] ; } return [填空7]; }
时间: 2023-05-16 08:06:26 浏览: 58
bool realign(queue<int> track)
{
int x;
queue<int> track1, track2, track3;
while (!track.empty())
{
x = track.front();
track.pop();
if (track1.empty() || x > track1.back())
{
track1.push(x);
}
else if (track2.empty() || x > track2.back())
{
track2.push(x);
}
else if (track3.empty() || x > track3.back())
{
track3.push(x);
}
else
{
return false;
}
}
return true;
}
相关问题
现在有n节火车车厢,编号为1、2在主铁轨的左边按顺序驶入,要求通过这个调度系统,在
现在有n节火车车厢,编号为1到n,在主铁轨的左边按顺序驶入。要求通过这个调度系统,在主铁轨的右边输出这些车厢的编号顺序。
这个调度系统可以使用栈来实现。首先,我们创建一个空的栈来辅助调度。然后,遍历车厢编号从1到n的顺序,依次执行以下步骤:
1. 将当前车厢编号压入栈中,模拟车厢从左边驶入主铁轨。
2. 检查栈中的元素是否为下一个待输出的车厢。如果是,则将栈顶元素弹出,并将其输出,模拟车厢从右边驶出主铁轨。继续检查栈中的元素,直到栈为空或者栈顶元素不是下一个待输出的车厢。
3. 如果车厢已经全部驶入主铁轨,但栈中还有元素,说明这些车厢的顺序不符合要求,无法调度到正确的输出顺序。否则,输出顺序正确。
举个例子,假设有5节车厢,编号从1到5。按照上述步骤进行调度:
1. 车厢1驶入主铁轨,栈中有元素1。
2. 车厢2驶入主铁轨,栈中有元素2 1。
3. 车厢3驶入主铁轨,栈中有元素3 2 1。
4. 栈顶元素3是待输出的下一个车厢,弹出3并输出,栈中有元素2 1。
5. 车厢4驶入主铁轨,栈中有元素4 2 1。
6. 栈顶元素4是待输出的下一个车厢,弹出4并输出,栈中有元素2 1。
7. 车厢5驶入主铁轨,栈中有元素5 2 1。
8. 栈顶元素5是待输出的下一个车厢,弹出5并输出,栈中有元素2 1。
9. 栈顶元素2是待输出的下一个车厢,弹出2并输出,栈中有元素1。
10. 栈顶元素1是待输出的下一个车厢,弹出1并输出,栈为空。
最终,输出的排序结果为3 4 5 2 1。通过这个调度系统,我们可以实现按照要求输出火车车厢的编号顺序。
用代码实现火车车厢重排问题
好的,以下是用 Python 实现的火车车厢重排问题代码:
```python
from queue import PriorityQueue
def rearrange(train):
n = len(train)
pq = PriorityQueue()
for i in range(n):
pq.put(train[i])
result = []
while not pq.empty():
car = pq.get()
result.append(car)
if len(result) > 1:
if result[-1] < result[-2]:
result[-1], result[-2] = result[-2], result[-1]
return result
```
该算法使用了 Priority Queue 数据结构,先将所有车厢放入 Priority Queue 中,每次取出当前 Priority Queue 中权重最小的车厢,然后将其插入到结果列表的末尾。若插入后导致相邻两个车厢顺序不合法,则交换它们的位置。依次进行,直到 Priority Queue 中没有元素。最后返回结果列表。