Я использую следующий код python, чтобы найти все пути между двумя узлами. Это не проблема для небольших графиков.Большой граф как вход для поиска всех путей
def bfs(graph, start, end):
# maintain a queue of paths
queue = []
# push the first path into the queue
queue.append([start])
while queue:
# get the first path from the queue
path = queue.pop(0)
# get the last node from the path
node = path[-1]
# path found
if node == end:
return path
# enumerate all adjacent nodes, construct a new path and push it into the queue
for adjacent in graph.get(node, []):
new_path = list(path)
new_path.append(adjacent)
queue.append(new_path)
for node3 in graph:
for node4 in graph:
few = bfs(graph, node3, node4)
if not few == None:
print ("{0} -> {1}".format(node3,node4))
print (few)
print ("\n")
Но я хочу, чтобы найти все пути между каждыми двумя узлами, для большого графа около 4K узлов и 20K края. Программа прерывает и не возвращает никакого вывода.
Помогите мне, как установить входной график, а также как установить вывод для добавления в отдельный файл?
Это просто часть социальной сети, и я думаю, что это не огромный граф с миллионами узлов и ребер. Он имеет около 20 Кб. –
Я думаю, что мы можем избежать циклов как измененный DFS. –
Кроме того, я думаю, что BFS и BFS избегают циклов –