首页 > 解决方案 > Python:从弧线创建路线

问题描述

我正在研究一个有能力的车辆路线问题,并找到了一个最佳解决方案,在我的图表上使用以下一组弧线活动:

[(0, 1),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (0, 10),
 (1, 0),
 (2, 13),
 (3, 9),
 (4, 12),
 (5, 0),
 (6, 14),
 (7, 8),
 (8, 0),
 (9, 0),
 (10, 11),
 (11, 0),
 (12, 3),
 (13, 0),
 (14, 2)]

该列表称为arcsDelivery.

我想重组这个列表来找到存储在列表中的我找到的路线routesdelivery

[[0,1,0],[0,4,12,3,9,0],[0,5,0],[0,6,14,2,13,0],[0,7,8,0],[0,10,11,0]] 

但是,我一直在努力这样做,有人有一些有用的提示吗?

标签: python

解决方案


这是一种方法(考虑到arcsdelivery列表是根据每个元组的第一个元素按升序排序的):

def findTuple(elem):
  for t in arcsDelivery:
    if t[0]==elem:
      return t
  return None

arcsDelivery = [(0, 1),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (0, 10),
 (1, 0),
 (2, 13),
 (3, 9),
 (4, 12),
 (5, 0),
 (6, 14),
 (7, 8),
 (8, 0),
 (9, 0),
 (10, 11),
 (11, 0),
 (12, 3),
 (13, 0),
 (14, 2)]

routesDelivery = []

startRoutes = len(list(filter(lambda elem: elem[0]==0, arcsDelivery)))

for i in range(startRoutes):
  tempList = []
  currentTuple = arcsDelivery[i]
  tempList.append(currentTuple[0])
  tempList.append(currentTuple[1])
  while True:
    if currentTuple[1]==0:
      break
    else:
      nextTuple = findTuple(currentTuple[1])
      currentTuple = nextTuple
      tempList.append(currentTuple[1])
  routesDelivery.append(tempList)

print(routesDelivery)

输出:

[[0, 1, 0], [0, 4, 12, 3, 9, 0], [0, 5, 0], [0, 6, 14, 2, 13, 0], [0, 7, 8, 0], [0, 10, 11, 0]]

推荐阅读