Это можно сделать довольно легко, если на вашем языке есть поддержка возврата / генераторы / итераторы / сопрограммы.
# Python code
def astar(start):
q = [start] # priority queue
while len(q) > 0:
node = heappop(q)
if isGoal(node):
yield node
for x in successors(node):
heappush(q, x)
Ключевое слово yield
похоже на return
, за исключением того, что функция может бытьповторно введен после yield
, чтобы получить следующее решение.Чтобы получить лучшие три:
solutions = []
i = 0
for sol in astar(start):
solutions.append(sol)
if i == 3:
break
i += 1
Однако , это не будет работать, если вы используете закрытый набор (то есть, Russell & Norvig ' график поиска алгоритм), поскольку с тех пор часть неоптимальных решений может быть "обрезана" при поиске оптимального.