查找是否可以使用BFS访问节点

时间:2018-03-31 12:07:30

标签: graph-theory breadth-first-search

我正在使用BFS来检查节点是否可访问以及是否打印路由。 谁能解释为什么在这种情况下BFS比DFS更受欢迎? 使用以下代码:

    LinkedList<String> queue = new LinkedList<String>();
    HashSet<String> visitedNodes = new LinkedHashSet<String> ();
    queue.add(source);
    visitedNodes.add(source);

    while (!queue.isEmpty()) {
        String focusNode = queue.poll();
        Set<Node> nodeSet = inputMap.getAllOutgoingNodes(focusNode);
        if (null != nodeSet) {
            for (Node s: nodeSet) {
                if (!visitedNodes.contains(s.edge1)) {
                    visitedNodes.add(s.edge1);
                    queue.add(s.edge1);
                    if (destination.equals(s.edge1)) {
                        for (String sn: visitedNodes) {
                            System.out.print(sn);     
                        break;
                    }
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果问题是检查一个节点是否可以访问,那么我相信DFS是首选(通常只是代码长度),如果你还必须找到一个路由,那么找到一个DFS的路径可能会很长(因此人们很难检查,因此首选BFS。

但无论如何都没有一般规则,这完全取决于个人偏好。