Я пытаюсь получить путь на графе, который охватывает все ребра и пересекает их только один раз. Это означает, что будет только две «конечные» точки, к которым будет присоединено нечетное количество узлов. Эти конечные точки будут либо иметь одно соединительное ребро, либо быть частью цикла и иметь 3 соединения.
Итак, в простом случае ниже мне нужно пройти по узлам в таком порядке 1-2-3-4-5 (или 5-4-3-2-1):
В более сложном случае ниже путь будет 1-2-3-4-2 (или 1-2-4-3-2):
Ниже также приведен допустимый график с двумя конечными точками: 1-2-4-3-2-5.
Я попытался найти название алгоритма для решения этой проблемы и подумал, что это «проблема китайского почтальона», но реализовал это на основе кода на https://github.com/rkistner/chinese-postman/blob/master/postman.py не дал ожидаемых результатов. .
Путь Эйлера выглядит почти так, как нужно, но реализация networkx будет работать только для закрытых (петлевых) сетей.
Я также просмотрел гамильтоновский путь и попробовал алгоритм networkx, но типы графиков не поддерживались.
В идеале я хотел бы использовать Python и networkx для реализации этого, и может быть простое решение, которое уже является частью библиотеки, но я не могу его найти.
networkx
какeulerian_path()
< /а>. - person iacob   schedule 08.04.2021