我需要编写java代码算法来计算未加权无向图(网络)中的平均最短路径。该图是100个节点(10×10)的网格,并且想要搜索网络中所有对(节点)之间的所有最短路径,然后除以最短路径的数量以获得平均的峰值路径。这可以通过修改Dijstra的算法来实现吗?有人可以告诉我怎么样吗?
dijkstra的alghoritm
public static void dijkstra(int s, int[][] A, int N, int[] d) {
int mini; int[] visit = new int[N];
for (int i=0;i<N;i++) {
d[i] = N*N;
visit[i] = 0;
}
d[s] = 0;
for (int k=0;k<N;k++) {
mini = -1;
for (int i=0;i<N;i++)
if ((visit[i]==0) && ((mini == -1) || (d[i] < d[mini])))
mini = i;
visit[mini] = 1;
for (int i=0;i<N;i++)
if (A[mini][i]==1)
if (d[mini] + A[mini][i] < d[i])
d[i] = d[mini] + A[mini][i];
}
}
答案 0 :(得分:1)
Dijkstra的算法将为您提供从给定节点到连接图中所有其他节点的最短路径。获得平均值的一种方法是迭代遍历图的每个节点,运行Dijkstra算法以获得从该节点到其他每个节点的最短距离,并获取从该节点开始的路径的平均值。在迭代时累积“从当前节点开始的路径的平均值”。完成迭代后除以节点数。
这是一种蛮力方法,会计算每个距离两次,但它应该给你正确的平均值。