最短路 Floyd算法

//构造的矩阵函数
#define inf 10000000
class Matrix
{
    public:
        Matrix(int n);//构造函数
        ~Matrix();//析构函数
        int row;//矩阵行数与列数
        int** p;
};
Matrix::Matrix(int n)
{
    row=n;
    p=(int**)malloc(row*sizeof(int*));
    for(int i=0;i<row;i++)
        p[i]=(int*)malloc(row*sizeof(int));
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            p[i][j]=(i==j)?0:inf;
}
Matrix::~Matrix()
{
    for(int i=0;i<row;i++)
        free(p[i]);
    free(p);
}
void nodes2nodes(Matrix* dis,Matrix* d,Matrix* r)
{
    Matrix t(dis->row);
    int n=d->row,i,j,m,temp;
    for(i=0;i<n;i++)    {
        for(j=0;j<n;j++)    {
            d->p[i][j]=dis->p[i][j];
            r->p[i][j]=j+1;
        }
    }
    for(m=0;m<n;m++)
    {
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                t.p[i][j]=d->p[i][j];
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                if(i!=j)    {
                    temp=t.p[i][m]+t.p[m][j];
                    if(temp<t.p[i][j])  {
                        d->p[i][j]=temp;
                        r->p[i][j]=r->p[i][m];
                    }
                }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 04:16:54

最短路 Floyd算法的相关文章

多源最短路Floyd 算法————matlab实现

弗洛伊德(Floyd)算法是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离. 假设图G中顶点个数为N,则需要对矩阵S进行N次更新.初始时,矩阵S中顶点a[i][j]的距离为顶点i到顶点j的权值:如果i和j不相邻,则a[i][j]=∞

最短路--floyd算法模板

floyd算法是求所有点之间的最短路的,复杂度O(n3)代码简单是最大特色 1 #include<stdio.h> 2 #include<string.h> 3 4 const int maxn=105; 5 const int INF=0x3f3f3f3f; 6 int ma[maxn][maxn],n; 7 8 inline int min(int a,int b){return a<b?a:b;} 9 inline int max(int a,int b){return

HDU 2066 最短路floyd算法+优化

http://acm.hdu.edu.cn/showproblem.php?pid=206 题意 从任意一个邻居家出发 到达任意一个终点的 最小距离 解析 求多源最短路 我想到的是Floyd算法 但是题目给出的n的大小不确定 所以图很稀疏 会有很多孤立点 会多跑很多没用的路径 需要优化一下 不然会超时 我看其他人很多都是用迪杰斯特拉写的,可以试试 AC代码 1 #include <stdio.h> 2 #include <math.h> 3 #include <string.

多元最短路-floyd算法

要获得带权图中任意两点之间的最短距离,可以通过多次调用求解单源最短路径的算法来实现.但floyd算法来实现会更简单. 算法步骤: 假设图由邻接矩阵存放,通过二维数组dis[maxN][maxN]给出一张有向或者无向图,dis[i][j]代表i到j的距离,没有直接连通的路径的话就初始化为无限大,用代指无限大的极大数INF代替,但这里需要防止出现溢出的情况,否则在程序执行后将出现结果错误. 然后进行relax操作,任意三个节点i,j,k,若dis[i][k]+dis[k][j]<dis[i][j],

Arbitrage(最短路-floyd算法变形求正权)

Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16127   Accepted: 6780 Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currenc

hdu 1690 Bus System 最短路 Floyd算法。。INF一定要很大很大。。。数据类型用long long。

Bus System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7163    Accepted Submission(s): 1853 Problem Description Because of the huge population of China, public transportation is very import

hdu 2544 最短路 floyd算法

点击打开链接题目链接 最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 32782    Accepted Submission(s): 14261 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的

杭电 ACM HDU 1217 Arbitrage(最短路 floyd算法)

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5272    Accepted Submission(s): 2418 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform

最短路算法模板合集(Dijkstar,Dijkstar(优先队列优化), 多源最短路Floyd)

再开始前我们先普及一下简单的图论知识 图的保存: 1.邻接矩阵. G[maxn][maxn]; 2.邻接表 邻接表我们有两种方式 (1)vector< Node > G[maxn]; 这个是之前就定义了图的大小了,再下面使用的时候就不用对图的大小进行申请了, 但是因为是直接申请了大小 要对图进行初始化,因此可能在某些题目中这样使用的话会超时 (2)vector< vector<Node> > G; 这个是未定义大小,但是在使用之前要对其的大小内存进行申请. G.resi