У меня есть алгоритм кругового роста (рост линий с закрытыми ссылками), в котором новые точки добавляются между существующими точками на каждой итерации.
Информация о связи каждой точки сохраняется в виде кортежа в списке. Этот список обновляется итеративно.
![enter image description here](https://i.stack.imgur.com/ap1Ic.png)
Вопросы:
Какой самый эффективный способ вернуть пространственный порядок этих точек в виде списка?
Нужно ли вычислять весь порядок на каждой итерации или есть способ кумулятивно упорядоченно добавлять новые точки в этот список?
![enter image description here](https://i.stack.imgur.com/qqhO3.png)
Все, что я мог придумать, это следующее:
tuples = [(1, 4), (2, 5), (3, 6), (1, 6), (0, 7), (3, 7), (0, 8), (2, 8), (5, 9), (4, 9)]
starting_tuple = [e for e in tuples if e[0] == 0 or e[1] == 0][0]
## note: 'starting_tuple' could be either (0, 7) or (0, 8), starting direction doesn't matter
order = list(starting_tuple) if starting_tuple[0] == 0 else [starting_tuple[1], starting_tuple[0]]
## order will always start from point 0
idx = tuples.index(starting_tuple)
## index of the starting tuple
def findNext():
global idx
for i, e in enumerate(tuples):
if order[-1] in e and i != idx:
ind = e.index(order[-1])
c = 0 if ind == 1 else 1
order.append(e[c])
idx = tuples.index(e)
for i in range(len(tuples)/2):
findNext()
print order
Он работает, но он не элегантен (не питоничен) и не эффективен.
Мне кажется, что рекурсивный алгоритм может быть более подходящим, но, к сожалению, я не знаю, как реализовать такое решение.
Кроме того, обратите внимание, что я использую Python 2 и могу иметь доступ только к полным пакетам Python (без ошибок)