如何检查Graph是否已连接

时间:2015-05-09 12:39:20

标签: java algorithm recursion graph depth-first-search

我有一个无方向图,想知道一个节点是否连接到另一个节点?

例如

0 1 0
1 0 1 
0 1 0

在此节点1中连接到节点3(因为存在从1到2和2到3的路径,因此连接了1-3)

我编写了使用DFS的程序,但我无法弄清楚为什么会给出错误的结果。

我不想保留任何全局变量并希望我的方法返回真正的id节点使用递归程序连接

public static boolean isConnectedGraph(int[][] graph, int start, int end,
        int visited[]) {
    visited[start] = 1;
    if (graph[start][end] == 1) {
        System.out.println("Yes connected....");
        return true;
    }
    for (int i = 0; i < graph[0].length; i++) {
        if (graph[start][i] == 1 && visited[i] == 0) {
            visited[i] =1;
            isConnectedGraph(graph, i, end, visited);

        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

您不会对递归调用isConnectedGraph(graph, i, end, visited);的结果做任何事情。您应该将其分配给变量,如果是true - 则返回true

将主循环更改为:

for (int i = 0; i < graph[0].length; i++) {
    if (graph[start][i] == 1 && visited[i] == 0) {
        visited[i] =1;
        if (isConnectedGraph(graph, i, end, visited)) return true;

    }
}