【问题标题】:find the node such sum of the minimum distances from that node to all other node is minimum找到从该节点到所有其他节点的最小距离之和最小的节点
【发布时间】:2020-09-24 00:08:13
【问题描述】:

如何找到节点,从该节点到所有其他节点的最小距离之和在无向图中最小。我已经用 dfs 遍历了图表。

我找到了与源节点的最小距离。策略是什么?

我的尝试 -

import java.util.LinkedList;
import java.util.Scanner;
class Edge {

    int from;
    int to;
    long wt;
    Edge(int a, int b, long w)
    {
        from = a;
        to = b;
        wt = w;
    }
}
class Graph {

    LinkedList<Edge>[] adj_lis;
    int V;
    public static long[]val;
    Graph(int v)
    {
        this.V = v;
        adj_lis = new LinkedList[V];
        for (int i = 0; i < V; i++)
            adj_lis[i] = new LinkedList<>();
    }


    void add_edge(int to, int from, long wt)
    {
        adj_lis[from].add(
                new Edge(from, to, wt));
        adj_lis[to].add(
                new Edge(to, from, wt));
    }

    // DFS method to find distance

    void dfs(int v,
             int par,
             long sum,
             boolean[] visited)
    {
        val[v] = sum;
        visited[v] = true;
        for (Edge e : adj_lis[v]) {
            if (!visited[e.to])
                dfs(e.to,
                        v,
                        sum + e.wt,
                        visited);
        }
    }

}

【问题讨论】:

    标签: graph


    【解决方案1】:

    首先,DFS 没有找到两个节点之间的最短路径,你应该使用 BFS。

    要在加权图中找到所有节点之间的最短路径,您可以使用Floyd Warshall 算法。它返回一个二维数组,其中array[i][j] 是节点i 和节点j 之间的最短路径的大小。因此,之后,您可以计算二维数组中行k 的总和,以找到从节点k 到所有其他节点的最小距离之和。对所有行执行此操作,然后找到其中的最小值以检测从该节点到所有其他节点的最小距离之和最小的节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 2018-05-25
      • 2020-08-02
      • 2015-01-15
      相关资源
      最近更新 更多