Floyd算法

typedef int Pathmatirx[MAXVEX][MAXVEX];
typedef int ShortPathTable[MAXVEX][MAXVEX];

//Floyd 算法,求网图G中各顶点到其余顶点 w 最短路径P[v][w] 及带权长度D[v][w]
void ShortestPath_Floyd(MGraph G, Pathmatirx *P, ShortPathTable *D)
{
	int v, w, k;
	for (v = 0; v < G.numVertexes; ++v)        //初始化 D 与 P
	{
		for (w = 0; w < G.numVertexes; ++w)
		{
			(*D)[v][w] = G.matirx[v][w];       //D[v][w] 值即为对应点间的权值
			(*P)[v][w] = w;                    //初始化 P
		}
	}
	//以上初始化矩阵 D 和 P

	for (k = 0; k < G.numVertexes; ++k)      //k代表中转顶点的下标
	{
		for (v = 0; v < G.numVertexes; ++v)       //v代表起始顶点
		{
			for (w = 0; w < G.numVertexes; ++w)      //w代表结束顶点
			{
				if ((*D)[v][w] >(*D)[v][k] + (*D)[k][w])
				{
					//如果经过下标为 k 顶点路径比原两点间路径更短
					//将当前两点间权值设为更小的一个
					(*D)[v][w] = (*D)[v][k] + (*D)[k][w];
					(*P)[v][w] = (*P)[v][k];           //路径设置经过下标为 k 的顶点
				}
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值