如何确定给定图的节点之间最短路径,已知节点之间的最短距离矩阵?
例如,假设有4个节点和最短距离矩阵(m)。
例如,假设有4个节点和最短距离矩阵(m)。
0 4 5 8
4 0 6 3
5 6 0 2
8 3 2 0
m(i,j)是节点i和节点j之间路径的距离,它们之间不一定有边相连。
有人能指导如何实现吗?提前感谢您。
0 4 5 8
4 0 6 3
5 6 0 2
8 3 2 0
m(i,j)是节点i和节点j之间路径的距离,它们之间不一定有边相连。
有人能指导如何实现吗?提前感谢您。
A
--2-->B
--2-->C
。在距离矩阵中,A 到 C 的距离为 4,但它们之间没有连接。Dijkstra 算法可能会认为这是一条路径,但实际上不是,因为在到达距离 4 时可以采取任何一步。原帖中有一个最短距离矩阵而不是边缘矩阵,它包含可能不存在于现实世界中的链接,因为它们是通过其他节点进行的。 - Ian Mercer您可以构建最小距离矩阵(另一个包含所有最小距离直到单元格[i,j]的矩阵),然后返回最后一个单元格。仅构建此矩阵需要O(n)。n是矩阵中项目的数量。
这里是构建最小距离矩阵的C#实现。
public static int[,] mindi_loop(int[,] original_mat)
{
int[,] mindi_mat = new int[original_mat.GetLength(0), original_mat.GetLength(1)];
for (int i = 0; i < original_mat.GetLength(0); i++)
{
for (int j = 0; j < original_mat.GetLength(1); j++)
{
if (i > 0 && j > 0)
{
mindi_mat[i, j] = Math.Min(mindi_mat[i - 1, j], mindi_mat[i, j - 1]) + original_mat[i, j];
}
else if (i > 0 && j < 1)
{
mindi_mat[i, j] = mindi_mat[i - 1, j] + original_mat[i, j];
}
else if (j > 0 && i < 1)
{
mindi_mat[i, j] = mindi_mat[i, j - 1] + original_mat[i, j];
}
else if (i==0 && j == 0)
{
mindi_mat[i, j] = original_mat[i, j];
}
}
}
return mindi_mat;
}
如何确定最短路径...
。 - guido