首页 > 解决方案 > 比较两个广度优先搜索实现

问题描述

我看到了一个广度优先搜索的实现,它与我所学的略有不同。对 bfs 使用“未访问、已访问、已访问”三个状态有什么好处?还是只是口味问题?

问题:找出图中两个节点之间是否存在路径。

    public enum State {
        Unvisited, Visited, Visiting;
    } 

    public static boolean search(Graph g,Node start,Node end) {  
    LinkedList<Node> q = new LinkedList<Node>();
    for (Node u : g.getNodes()) {
        u.state = State.Unvisited;
    }
    start.state = State.Visiting;
    q.add(start);
    Node u;
    while(!q.isEmpty()) {
        u = q.removeFirst();
        if (u != null) {
            for (Node v : u.getAdjacent()) {
                if (v.state == State.Unvisited) {
                    if (v == end) {
                        return true;
                    } else {
                        v.state = State.Visiting;
                        q.add(v);
                    }
                }
            }
            u.state = State.Visited;
        }
    }
    return false;
}

资料来源:Gayle McDowell 的《破解编码采访》

标签: breadth-first-search

解决方案


推荐阅读