C++实现一个简单的Floyd算法
Posted Jing Sir
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++实现一个简单的Floyd算法相关的知识,希望对你有一定的参考价值。
如下所示,这是一个简单的弗洛伊德:
void Floyd(Graph<EdgeType>&G,EdgeType **Adj,int **Path)
{
int i,j,v;//i,j为计数器,v记录相应顶点
int n=G.VerticesNum();
for(i=0;i<n;i++)//初始化D数组,Path数组
{
for(j=0;j<n;j++)
{
if(i==j)
{
Adj[i][j]=0;
Path[i][j]=i;
}
else
{
Adj[i][j]=INFINITY;
Path[i][j]=-1;
}
}
}
for(v=0;v<n;v++)
{
//检查各条边,将边(u,v)的值作为Adj[v,u],v作为Path[u]的值
for(Edge<EdgeType> e=G.FirstEdge(v);G.IsEdge(e);e=G.NextEdge(e))
{
Adj[v][e.end]=G.Weight(e);
}
}
//如果两个顶点i,j之间的最短路径经过顶点v,且有Adj[i][j]>(Adj[i][v]+Adj[v][j]),则更新Adj[i][j],Path[i][j]
for(v=0;v<n;v++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(Adj[i][j]>(Adj[i][v]+Adj[v][j]))
{
Adj[i][j]=Adj[i][v]+Adj[v][j];
//更新i,j经过的点的编号不超过v的最短路径长度
Path[i][j]=v;
//更新i,j之间经过的点的编号不超过v的最短路径上j的前驱
}
}
以上是关于C++实现一个简单的Floyd算法的主要内容,如果未能解决你的问题,请参考以下文章