【问题标题】:How to check if Graph is connected如何检查Graph是否已连接
【发布时间】:2015-05-09 12:39:20
【问题描述】:

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

例如

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;
}

【问题讨论】:

  • 你为什么要递归调用isConnectedGraph

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


【解决方案1】:

您不会对递归调用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;

    }
}

【讨论】:

  • 谢谢阿米特,我错误地给出了错误的代码,现在编辑请检查,但我仍然是你的意思,你能写出改进的代码
  • @Arvind 已编辑,旧答案中也提到了这个问题,但我现在专注于它。
  • @Arvind 是的,看看递归调用,它现在处于 if 条件
猜你喜欢
  • 2012-08-05
  • 2015-06-21
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多