码迷,mamicode.com
首页 > 编程语言 > 详细

Floyd算法

时间:2015-04-04 19:46:50      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:acm   algorithm   算法   

Floyd算法

        Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。

        注意:由下面的练习可以看出,其实很多题目不是直接问你floyd怎么求最短路径,而是要你利用floyd的动态规划思想解决类似floyd的问题。

        Floyd算法可以算边权值非负的最短路径问题。下面给出算法模板

<span style="font-size:18px;">#include<cstdio>
using namespace std;
#define INF 1e9
const int maxn=100+10;
int n,m;//点数,边数,点从0到n-1编号
int dist[maxn][maxn];//记录距离矩阵
int path[maxn][maxn];//path[i][j]=x表示i到j的路径上(除i外)的第一个点是x.
void init()
{
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    {
        dist[i][j] = i==j?0:INF;//其实这里d[i][j]应该还要通过输入读数据的
        path[i][j]=j;
    }

    //读取其他dist[i][j]的值
}
void floyd()
{
    for(int k=0;k<n;k++)
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(dist[i][k]<INF && dist[k][j]<INF )
    {
        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];
        }
        else if(dist[i][j] == dist[i][k]+dist[k][j] &&path[i][j]>path[i][k])
        {
            path[i][j] = path[i][k];  //最终path中存的是字典序最小的路径
        }
    }
}

int main()
{
    //读n和m
    init();
    //读m条边
    floyd();
    //输出所求最短路径距离
    return 0;
}
</span>


Floyd算法应用

HDU 1690Bus System(Floyd):简单应用。解题报告!

POJ 2240Arbitrage(Floyd):Floyd的DP思想。解题报告!

HDU 1385Minimum Transport Cost(Floyd+打印字典序最小路径):Floyd变形且输出字典序最小的路径。解题报告

POJ 2263Heavy Cargo(Floyd变形):floyd变形。解题报告!

POJ 1847Tram(Floyd):动态图求最短路径。解题报告!

POJ 1125Stockbroker Grapevine(Floyd):Floyd简单应用。解题报告!

POJ 3615Cow Hurdles(Folyd变形):最大值中的最小值问题。解题报告!

POJ 3660Cow Contest(Floyd传递闭包):传递闭包问题。解题报告!

POJ 1975Median Weight Bead(Floyd传递闭包):传递闭包。解题报告!

POJ 2570Fiber Network(Floyd传递闭包+状态压缩):状态压缩+传递闭包。解题报告

HDU 4034Graph(Floyd变形):有向图最短路径的必要边。解题报告!

HDU 3665Seaside(简单Floyd):解题报告!

HDU 2807The Shortest Path(矩阵相乘+Floyd):解题报告!

HDU 1869六度分离(简单Floyd):解题报告!

HDU 1245Saving James Bond(Floyd):简单Floyd,需要做点分析。解题报告!

POJ 2502Subway(Floyd单源最短路):简单应用。解题报告

 


Floyd算法

标签:acm   algorithm   算法   

原文地址:http://blog.csdn.net/u013480600/article/details/44875105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!