Неверный вывод для покрытия всех ребер графа
Мне нужно покрыть все ребра графа минимальным количеством путей. Я читал, что здесь нужен метод Эйлера. Я пытался воспроизвести его, но он работает неправильно.
def split_graph(graph, n):
stack = []
path = []
some_list = []
for i in range(n):
some_list .append(sum(graph[i]))
cur = 0
while (len(stack) > 0 or sum(graph[cur]) != 0):
if (sum(graph[cur]) == 0):
path.append(cur+1)
cur = stack[-1]
del stack[-1]
else:
for i in range(n):
if (graph[cur][i] == 1):
stack.append(cur)
graph[cur][i] = 0
graph[i][cur] = 0
cur = i
print(path)
if __name__ == '__main__':
graph = [[0, 1, 0, 1, 0, 0],
[1, 0, 1, 1, 0, 0],
[0, 1, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 1],
[0, 0, 0, 1, 1, 0]]
n = len(graph)
split_graph(graph, n)
Требуемый вывод (Вариантов может быть несколько, это один из них):
[6, 7, 4, 1, 2, 3]
[2,4]
[7, 5]
Мой вывод:
[3, 5, 6, 1, 4, 2]
Как это можно исправить?