Я нахожу кратчайший путь с помощью BFS, я получаю это RecursionError: maximum recursion depth exceeded in comparison
очень быстро, любое предложение о том, как избежать его с помощью генераторов? Или сделать его итеративным является единственным хорошим вариантом?Как избежать максимальной глубины рекурсии в python с генераторами?
код ниже:
def bfs_paths(graph, start, goal):
queue = [(start, [start])]
while queue:
(vertex, path) = queue.pop(0)
for next in graph[vertex] - set(path):
if next == goal:
yield path + [next]
else:
queue.append((next, path + [next]))
def shortest_path(graph, start, goal):
try:
return next(bfs_paths(graph, start, goal))
except StopIteration:
return None
Пример использования:
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])}
shortest_path(graph, 'A', 'F') # ['A', 'C', 'F']
Нет, я говорю об использовании генераторов для их обработки. И это пример. Я использую следующий генератор, и все же я достигаю максимальной глубины. –
Если вы получаете эту ошибку с небольшими графами (например, ваш образец), у вас есть логическая ошибка, а не ограничение ресурсов. Если граф не имеет более тысячи узлов, это не должно быть проблемой. –
Ваша точная программа работает на моей машине просто отлично – Navidad20