Нужно ли выделять 3 поля состояния при первом поиске по ширине? - PullRequest
0 голосов
/ 16 мая 2018

В решении CTCI для проверки наличия маршрута между двумя узлами определено перечисление из 3 состояний. Однако, похоже, что действительно важно двоичное состояние (посещения = истина | ложь). Это правда? Если нет, то почему необходимо различать 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;
}
...