找到该节点到该其他节点的最小距离之和最小

时间:2020-06-04 21:15:04

标签: graph

我如何才能找到该节点,使得从该节点到所有其他节点的最小距离之和在无向图中是最小的。我已经用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);
        }
    }

}

1 个答案:

答案 0 :(得分:1)

首先,DFS找不到两个节点之间的最短路径,因此您应该使用BFS。

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