/*
求出每两点之间的最短路径,多源最短路径
solution: 该模板主要基于这样一个事实,对于任意一条至少包含两边的路径i->j,一定存在一个中间点k,使得i->j
的总长度等于i->k与k->j的长度之和。对于不同的点k,i->k和k->j的长度之和可能不同,最后还需要一个
最小值才是i->j的最短路径
time: 2016/4/21
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1000 + 5;
const int INF = 99999999;
int n; //n为顶点数
void floyd() { //floyd算法
for(int k = 0; k < n; i++)
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
int main()
{
/*
此处进行一些数据输入处理
*/
for(int i = 0; i < n; i++) { //在调用floyd算法前一定要进行初始化,注意这个初始化方法的优势
d[i][i] = 0;
for(int j = i + 1; j < n; j++) d[i][j] = d[j][i] = INF; //一定要判断清楚题意,看是否是构造有向边还是无向边
}
floyd(); //调用floyd主算法
/*
此处进行数据结果的输出
*/
return 0;
}
floyd算法
最新推荐文章于 2024-02-23 23:59:28 发布