floyd算法多源有权最小路径

需要两个矩阵
D矩阵保存距离,D[i][j] 存储的就是 i 到 j 点的距离;
Path矩阵保存路径;

Floyd 算法不能解决有负值圈的情况;
void Floyd(Graph G,int D[][Maxnum],int Path[][Maxnum])
{
	int i, j, k;
	for (i = 0; i < G->Nv; i++)
		for (j = 0; j < G->Nv; j++)
		{
			D[i][j] = G->G[i][j];  // copy 保存图的矩阵,如果 i 到 j 没有边,G[i][j] 值为无穷大
			Path[i][j] = -1; 
		}
	for (k = 0; k < G->Nv; k++)
		for (i = 0; i < G->Nv; i++for (j = 0; j < G->Nv; j++)
				if (D[i][j] < D[i][k] + D[k][j]) 
				// 如果 i 到中间节点 k 的距离加上 k到 j 的距离小于 i 到 j 的距离
				// 更新距离和路径 , 经过 k 个节点 的 递推,i 到 j 的距离必为最小值
				{
					D[i][j] = D[i][k] + D[k][j];
					Path[i][j] = k;}

猜你喜欢

转载自blog.csdn.net/weixin_40540957/article/details/84304257