#python #algorithm #graph #graph-theory #graph-algorithm
#python #алгоритм #График #теория графов #граф-алгоритм
Вопрос:
Я программирую алгоритм глубины сначала.
входные данные — это вершина и список смежности, вот мои данные:
{'N': ['X'],
'X': ['N', 'A'],
'A': ['X', 'B', 'D', 'C'],
'B': ['A', 'H', 'G'],
'C': ['D', 'A'],
'D': ['C', 'A', 'F', 'L'],
'F': ['D', 'L'],
'L': ['D', 'F'],
'H': ['B', 'G'],
'G': ['H', 'B'],
'Q': ['W'],
'W': ['Q']}
вот мой код:
def explore (node):
node[visited] = True
clock =1
node[pre_time] = clock
for neighbor of node:
if not neighbor[visited]:
explore(neighbor)
clock =1
node[post_time] = clock
теперь это работает нормально… за исключением того, что мои pre_time и post_time перепутались
Я хочу, чтобы мое время публикации было рассчитано после того, как я закончу исследовать всех соседей
но мой результат такой
{'N': {'post': 2, 'pre': 1, 'visited': True}, 'X': {'post': 3, 'pre': 2, 'visited': True}, 'A': {'post': 4, 'pre': 3, 'visited': True}, 'B': {'post': 5, 'pre': 4, 'visited': True}, 'C': {'post': 6, 'pre': 5, 'visited': True}, 'D': {'post': 5, 'pre': 4, 'visited': True}, 'F': {'post': 6, 'pre': 5, 'visited': True}, 'L': {'post': 7, 'pre': 6, 'visited': True}, 'H': {'post': 6, 'pre': 5, 'visited': True}, 'G': {'post': 7, 'pre': 6, 'visited': True}, 'Q': {'post': None, 'pre': None, 'visited': False}, 'W': {'post': None, 'pre': None, 'visited': False}})
Что я делаю не так?
Вот воспроизводимый код в Colab
https://colab.research.google.com/drive/1CTxyDRcCeNuh8b68Jpb8IW-8oy56JSQg?usp=sharing
Комментарии:
1. в чем проблема?
2. Поделитесь большим количеством кода (где вы вызываете explore ())
3. Я поделился ссылкой
4. Похоже, вы ожидаете
clock
, что это будет глобальная переменная, но она ограничена вызовом функции. Инициализируйте его вне функции, а затем поместите строкуglobal clock
внутри функции, и ваша проблема должна исчезнуть.5. Ты гений @btilly, это сработало как по волшебству. Спасибо