我试图编写一个算法来确定有向图中的两个节点是否已连接。很简单,但是我已经挂断了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;
有没有更好的方法来写这个?主要的麻烦是让算法继续搜索是否有未命中,但是一旦匹配就停止搜索。我想有一个干净的方式来做这件事......?