Python:从弧线创建路线

时间:2018-12-16 13:58:03

标签: 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]] 

但是,有人要提供一些有用的提示,我一直在努力做到这一点?

1 个答案:

答案 0 :(得分:1)

这是一种实现方法(考虑到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]]