我如何才能找到该节点,使得从该节点到所有其他节点的最小距离之和在无向图中是最小的。我已经用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);
}
}
}
答案 0 :(得分:1)
首先,DFS找不到两个节点之间的最短路径,因此您应该使用BFS。
要在所有节点之间的加权图中查找最短路径,可以使用Floyd Warshall算法。它返回一个二维数组,其中array[i][j]
是节点i
和节点j
之间最短路径的大小。因此,之后,您可以计算2D数组中行k
的总和,以找到从节点k
到所有其他节点的最小距离的总和。对所有行执行此操作,然后找到其中的最小值,以检测从该节点到所有其他节点的最小距离之和最小的节点。