您的位置:首页 > 其它

每对顶点之间的最短路径-Floyd

2011-05-03 12:51 357 查看
void Floyd( MGraph G, int path[][MAX_VERTEX_NUM], VRType dist[][MAX_VERTEX_NUM] )
{	//用Floyd算法求有向网G中每对顶点之间的最短路径path[i][j]及
//带权路径长度dist[i][j],dist[i][j]存放顶点vi到vj的最短距离,
//path[i][j]保存从源点vi到终点vj的最短路径中的源点vi的下一个顶点的序号
int i,j,k;
for( i=0; j<G.vexnum; ++i )
for( j=0; j<G.vexnum; ++j ) {
dist[i][j] = G.arcs[i][j].adj;		//初值为i到j 的直接距离
path[i][j] = j;						//初值为顶点vj的序号
}
for( k=0; k<G.vexnum; ++k )
{
for( i=0; i<G.vexnum; ++i )
{
for( j=0; j<G.vexnum; ++j )
{
if( i==k || j==k|| i==j) continue;
if( dist[i][j] > dist[i][k]+dist[k][j] )		//得到新的最短路径长度值
{
dist[i][j] = dist[i][k]+dist[k][j];		//更新最短路径长度值
path[i][j] = path[i][k];				//更新最短路径
}
}//for(j...)
}//for(i...)
}//for(k...)
}//Floyd
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: