弗洛伊德算法
学习笔记:
点击查看代码
void ShortestPath_Floyd(AMGraph G)
{//用Floyd算法求有向网G中各对顶点i和j之间的最短路径
for(int i=0;i<G.vexnum;i++)//初始各对结点之间已知路径及距离
for(int j=0;j<G.vexnum;j++)
{
D[i][j]=G.arcs[i][j];
if(D[i][j]<MaxInt &&i!=j)//如果i和j之间有弧,则将j的前驱置为i
Path[i][j] = i;
else//否则置为-1
Path[i][j]=-1;
}
for(int k=0;k<G.vexnum;k++)
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++){//从i经k到j的一条路径更短
if(D[i][k]+D[k][j]<D[i][j])
{
D[i][j]=D[i][k]+D[k][j];//更新D[i][j]
Path[i][j] = Path[k][j];//更改j的前驱为K
}
}