首页 > 解决方案 > 广度优先搜索时是否需要区分3个状态字段

问题描述

在用于检查两个节点之间是否存在路由的 CTCI 解决方案中,定义了一个 3 状态枚举。然而,看起来真正重要的是 (visited = true|false) 的二元状态。这是真的?如果不是,为什么需要区分 3 个不同的状态?

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;
}

标签: algorithmbreadth-first-search

解决方案


推荐阅读