如何修改广度优先搜索算法以包含解决方案路径?

时间:2009-10-13 19:56:27

标签: algorithm computer-science breadth-first-search

我的书中有以下伪代码用于广度优先搜索:

function breadth_first_search:
    begin
        open := [Start]
        closed := [];
        while open != [] do
            begin
                remove leftmost state from open, call it X;
                    if X is a goal then return SUCCESS
                        else begin
                            generate children of X;
                            put X on closed;
                            discard children of X if already on open or closed;
                            put remaining children on right end of open;
                        end
            end
       return FAIL;
    end

我自己遵循这些伪代码指令实现了类似的算法。我的问题是,修改它的最简单方法是什么,以便维护解决方案路径?

简单地知道我可以找到解决方案并不像拥有转换列表那样有用。

2 个答案:

答案 0 :(得分:6)

在排队每个节点时设置Parent[childNode] = currentNode(当您设置Visible[Node] = 1时)。

然后从您想要的节点开始递归查找Parent数组,并将您在Parent数组中看到的每个节点附加到路径中。 Parent[root]nil,递归将停在那里。

答案 1 :(得分:3)

您是否有可能更改树结构?如果是这样,您可能希望在每个节点/叶子中添加一个parent指针,这样当您找到解决方案时,您将跟随父指针一直到根。