Сортировка списка кортежей, состоящих из двух чисел, по последовательным числам - PullRequest
0 голосов
/ 05 мая 2020

Список кортежей является результатом оптимизации маршрутизации транспортного средства и представляет дуги от одной остановки до другой, где 0 представляет депо транспортного средства (начальная и конечная точки транспортного средства). Поскольку транспортному средству необходимо проехать несколько кругов, оно может вернуться в депо до того, как будут сделаны все остановки. Решатель всегда будет сначала возвращать начальные дуги, что в приведенном ниже примере означает, что первые последовательные кортежи, начинающиеся с 0, а именно (0, 3), (0, 7), (0, 8), будут определять, сколько кругов (= 3) осталось.

Как я могу отсортировать дуги в последовательном порядке, чтобы одно транспортное средство могло перемещать дуги одну за другой?

Ввод:

li = [(0, 3), (0, 7), (0, 8), (3, 0), (4, 0), (7, 3), (8, 4), (3, 0)]

Вывод:

[(0, 3), (3, 0), (0, 7), (7, 3), (3, 0), (0, 8), (8, 4), (4, 0)]

То, что я пробовал до сих пор:

    laps = 0
    for arc in li:
        if arc[0] == 0:
            laps = laps + 1
    new_list = []
    for i in range(laps):
        value = li.pop(0)
        new_list.append([value])
    for i in range(laps):
        while new_list[i][-1][1] != 0:
            arc_end = new_list[i][-1][1]
            for j in range(len(li)):
                if li[j][0] == arc_end:
                    value = li.pop(j)
                    new_list[i].append(value)
                    break
    flat_list = [item for sublist in new_list for item in sublist]
    return flat_list

1 Ответ

0 голосов
/ 05 мая 2020

Вы пытаетесь решить задачу поиска циклов в ориентированном графе. Сама проблема не является сложной для решения, и Python имеет очень хороший пакет для решения таких задач - networkx . Было бы неплохо узнать немного о фундаментальных алгоритмах графа. Существует также еще один вопрос о переполнении стека об этом алгоритме, с которым вы можете ознакомиться по адресу Поиск всех циклов в ориентированном графе

...