Я пытаюсь поделиться своей реализацией углубленного первого поиска (DFS). Я пытаюсь понять, как он может проходить по неориентированному графу, а это означает, что не все узлы превращаются в один граф, а два разных. Я искал небольшие основы DFS только с одним графиком. И я столкнулся с проблемой в «что произойдет, если существует более одного графа и он не подключен?» Поэтому я начал искать способ сделать это, используя свои знания из простой реализации DFS , Однако это немного сложнее, чем я думал. Вот пример кода, с которым я столкнулся:
"""DFS implemention."""
adjacency_matrix = {
1: [2, 3],
2: [4, 5],
3: [5],
4: [6],
5: [6],
6: [7],
7: [],
8: [9],
9: [8]
}
def DFS_un(graph):
"""Traversal for undirected graphs."""
vertices = graph[0]
edges = graph[1]
def visit(vertex):
if vertex in visited:
return
visited.add(vertex)
print(vertex)
if vertex in edges:
for e in edges[vertex]:
visit(e)
visited = {}
for v in vertices:
visit(v)
if __name__ == '__main__':
DFS_un(adjacency_matrix)
И сообщение об ошибке гласит:
Traceback (most recent call last):
File "dfs.py", line 33, in <module>
DFS_dis(adjacency_matrix)
File "dfs.py", line 17, in DFS_dis
vertices = graph[0]
KeyError: 0
Если вы видите, я использую один график, но он имеет неориентированные числа, которые составляют 8 и 9 (8 <-> 9). Почему я не получаю вывод правильно? Извините, я тоже немного изучаю Python3 :). Спасибо за вашу помощь!