ACM_Floyd-Warshall (Floyd) 算法

来源:互联网 发布:java web小项目下载 编辑:程序博客网 时间:2024/05/16 01:59

Floyd算法相当于Dijkstra算法的扩展版,由原来的一维数组到现在的二维数组,所以Floyd算法可以求得任何一个点到其他所有点的最短路径;

for循环中k,i,j的顺序是不能改变的:k是中间点,每一个中间点都有可能能够更新任意两点之间的距离,所以,最外层for循环每轮到一个k值都得把整个二维数组跑一遍,能用k更新的就更新!

#include<cstdio>#include<iostream>using namespace std;#define INF 9999999int dis[110][110]void floyd(int n)//n个节点{    int i,j,k;    for (k = 1; k <= n; ++k)    {        for (i = 1; i <= n; ++i)        {            if (dis[i][k] == INF)//这条判断减少循环次数                continue;            for (j = 1; j <= n; ++j)            {                if (dis[i][j] > dis[i][k] + dis[k][j])//更新dis数组,存图用的数组也是dis数组                    dis[i][j] = dis[i][k] + dis[k][j];            }        }    }}//初始时,要把dis数组中的每个数赋值成INF,好习惯!



0 0
原创粉丝点击