Task03:栈与递归
车辆重排
假设一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1至n, 货运列车按照第n站至第1站的次序经过这些车站。车厢的编号与它们的目的地相同。为了便于从列车上卸掉相应的车厢,必须重新排列车厢,使各车厢从前至后按编号1至n的次序排列。当所有 的车厢都按照这种次序排列时,在每个车站只需卸掉最后一节车厢即可。
我们在一个转轨站里完成车厢的重排工作,在转轨站中有一个入轨、一个出轨和k个缓冲铁轨(位于入轨和出轨之间)。图(a)给出一个转轨站,其中有k个(k=3)缓冲铁轨H1,H2 和H3。开始时,n节车厢的货车从入轨处进入转轨站,转轨结束时各车厢从右到左按照编号1至n的次序离开转轨站(通过出轨处)。在图(a)中,n=9,车厢从后至前的初始次序为5,8,1,7,4,2,9,6,3。图(b)给出了按所要求的次序重新排列后的结果。
# coding=utf-8
"""
@File: task_03.py
-----------------------------------------
@Author: Jack
@Time: 2020/1/10/010 22:10
@Email:jack18588951684@163.com
-----------------------------------------
"""
def VehicleReorder(Trucks, k):
"""
车辆重排
:param cars:
:param k:
:return:
"""
BufferRails = []
for i in range(k):
BufferRails.append([])
currentCarriage = 1
for i in Trucks:
if i == currentCarriage:
print('{}号车厢入轨->出轨'.format(i))
currentCarriage += 1
continue
else:
for buffer in BufferRails:
if not buffer:
buffer.append(i)
break
else:
if min(buffer) > i:
buffer.append(i)
break
for buffer_list in BufferRails:
for i in range(len(buffer_list)):
last = buffer_list.pop()
if last == currentCarriage:
print('{}号车厢入轨->出轨'.format(last))
currentCarriage += 1
Trucks = [5, 8, 1, 7, 4, 2, 9, 6, 3]
k = 3
print(VehicleReorder(Trucks, k))
程序输出:
1号车厢入轨->出轨
2号车厢入轨->出轨
3号车厢入轨->出轨
4号车厢入轨->出轨
5号车厢入轨->出轨
6号车厢入轨->出轨
7号车厢入轨->出轨
8号车厢入轨->出轨
9号车厢入轨->出轨