在进行广度优先搜索时是否有必要区分3个状态字段

时间:2018-05-16 13:30:01

标签: algorithm breadth-first-search

在用于检查两个节点之间是否存在路由的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;
}

0 个答案:

没有答案