Floyd算法 笔记 C/C++

个人笔记,仅供复习

1.适用范围:求每一对顶点之前的最短路径(适用稠密图)

2.算法思想:在一般情况下,若(vi,…,vk )和( vk,…,vj )分别是从 vi 到 vk从 vk 到 vj 中间顶点的序号不大于k的最短路径,则将( vi,…, vk ,… , vj )和已经得到的从vi到vj中间顶点的序号不大于k-1的最短路径相比较,其长度较短者便是从vi到vj的中间顶点的序号不大于k的最短路径。这样,在经过n次比较后,最后求得的必是从vi到vj的最短路径。按此方法,可以同时求得各对顶点间的最短路径。

3.具体步奏:其中D(k)[i][j],表示只经过顶点编号小于k的顶点i与j的最短路径。

4.代码参考:

void Floyd()
{ 
	for ( i = 0; i < N; i++ )
		for( j = 0; j < N; j++ ) {
			D[i][j] = G[i][j];
			path[i][j] = -1;
		}
		for( k = 0; k < N; k++ )
			for( i = 0; i < N; i++ )
				for( j = 0; j < N; j++ )
				if( D[i][k] + D[k][j] < D[i][j] ) {
					D[i][j] = D[i][k] + D[k][j];
					path[i][j] = k;
				}
}

posted @ 2018-07-15 10:53  Dr_Lo  阅读(123)  评论(0编辑  收藏  举报