Простейшим способом go было бы построить граф и использовать доступные алгоритмы. В экземпляре NetworkX foe у вас есть набор базовых c алгоритмов для в ширину поиска узлов графа в nx.algorithms.traversal
. Таким образом, вы можете сделать:
s = '''1 2
2 3
2 5
5 1
3 4
4 5
4 6'''
l = [i.split() for i in s.splitlines()]
Затем построить график из списка ребер:
import networkx as nx
G = nx.from_edgelist(l)
И использовать доступные методы из упомянутого модуля, такие как перебор ребер по ширине. -первый поиск, начиная с источника:
list(nx.algorithms.traversal.breadth_first_search.bfs_edges(G, '2'))
# [('2', '1'), ('2', '3'), ('2', '5'), ('3', '4'), ('4', '6')]