DFS递归问题

时间:2017-09-10 15:54:56

标签: java recursion graph depth-first-search

我试图编写一个算法来确定有向图中的两个节点是否已连接。很简单,但是我已经挂断了DFS的递归实现。

我的解决方案非常难看:

public static boolean isConnected (Node src, Node dst) {
    HashSet<Node> visited = new HashSet<>();
    return isConnectedHelper(src, dst, visited);
}

private static boolean isConnectedHelper(Node src, Node dst, HashSet<Node> visited) {
    if (src.equals(dst)) {
        return true;
    }

    if (!visited.contains(src)) {
        visited.add(src);
        for (Node neighbor : src.neighbors) {
            if (isConnectedHelper(neighbor, dst, visited))
                return true;
        }
    }
    return false;
}

值得注意的是,这条线很难看:

        if (isConnectedHelper(neighbor, dst, visited))
            return true;

有没有更好的方法来写这个?主要的麻烦是让算法继续搜索是否有未命中,但是一旦匹配就停止搜索。我想有一个干净的方式来做这件事......?

0 个答案:

没有答案