精华内容
下载资源
问答
  • FLOYD

    2019-10-24 12:03:53
    FLOYD
  • Floyd

    千次阅读 2020-10-12 21:50:31
    //超过200,Floyd大概率超时 const int MAX = 200; int graph[MAX][MAX];//邻接矩阵存图 int n,m;//n为结点数,m为边数 const int inf_int = 2147483647; void Floyd(){ //Floyd思想是利用动态规划的思想,经过k...
    //超过200,Floyd大概率超时 
    const int MAX = 200;
    int graph[MAX][MAX];//邻接矩阵存图 
    int n,m;//n为结点数,m为边数 
    const int inf_int = 2147483647;
    void Floyd(){
    	//Floyd思想是利用动态规划的思想,经过k结点与不经过k结点
    	for(int k=1;k<=n;k++)//k为中间节点
    		for(int i=1;i<=n;i++)
    			if(graph[i][k] != inf_int)//一个小优化,可以减少一点计算时间
    				for(int j=1;j<=n;j++)
    					if(graph[i][j]>graph[i][k]+graph[k][j])
    						graph[i][j]=graph[i][k]+graph[k][j];
    }
    
    //初始化邻接矩阵为无穷大值 
    void init(){
    	for(int i=1;i<=n;++i)
    		for(int j=1;j<=n;++j){
    			if(i==j) 
    				graph[i][j] = 0;
    			else
    				graph[i][j] = inf_int; 
    		}
    }
    
    
    
    //执行完Floyd后
    //graph[u][v] 表示从u到v的最短路,如果为inf_int,则说明u,v不连通
    
    //如果graph[i][i]即结点i到自身的距离没有设置为初值0,而是设置为无穷
    //则执行Floyd后graph[i][i]=graph[i][u]+...+graph[v][i],即到外面绕一圈回来的最小路径
    //如果存在某个graph[i][i]<0,那么说明图中存在负圈
    
    展开全文
  • floyd

    2020-07-18 11:53:51
    模板(floyd算法 —— 模板题 AcWing 854. Floyd求最短路) 时间复杂度是 O(n3), n 表示点数 初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d...

    大雪菜的课(笔记)

    搜索与图论(二)

    1.最短路

    (6).floyd

    模板(floyd算法 —— 模板题 AcWing 854. Floyd求最短路)

    时间复杂度是 O(n3), n 表示点数

    初始化:
        for (int i = 1; i <= n; i ++ )
            for (int j = 1; j <= n; j ++ )
                if (i == j) d[i][j] = 0;
                else d[i][j] = INF;
    
    // 算法结束后,d[a][b]表示a到b的最短距离
    void floyd()
    {
        for (int k = 1; k <= n; k ++ )
            for (int i = 1; i <= n; i ++ )
                for (int j = 1; j <= n; j ++ )
                    d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
    }
    
    AcWing854. Floyd求最短路

    给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。
    再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。
    数据保证图中不存在负权回路。

    输入格式
    第一行包含三个整数n,m,k
    接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
    接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。

    输出格式
    共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径,则输出“impossible”。

    数据范围
    1≤n≤200,
    1≤k≤n2
    1≤m≤20000,
    图中涉及边长绝对值均不超过10000。

    输入样例:
    3 3 2
    1 2 1
    2 3 2
    1 3 1
    2 1
    1 3
    输出样例:
    impossible
    1

    #include <iostream>
    #include <string.h>
    using namespace std;
    const int N=210,INF=1e9+10;
    int n,m,q;
    int d[N][N];
    void floyd(){
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
    }
    int main()
    {
        cin>>n>>m>>q;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i==j)    d[i][j]=0;
                else    d[i][j]=INF;
        while(m--){
            int a,b,c;
            cin>>a>>b>>c;
            d[a][b]=min(d[a][b],c);
        }
        floyd();
        while(q--){
            int a,b;
            cin>>a>>b;
            if(d[a][b]>INF/2)   cout<<"impossible";
            else    cout<<d[a][b];
            cout<<endl;
        }
        return 0;
    }
    
    展开全文
  • floyd-源码

    2021-03-17 06:59:06
    floyd
  • Floyd.cpp Floyd算法

    2020-10-13 15:52:19
    最短路Floyd算法。Floyd算法(Floyd-Warshallalgorithm)又称为弗洛伊德算法、插点法,是解决给定的加权图中顶点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
  • Floyd_algorthim:Floyd_algorthim

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,727
精华内容 7,890
关键字:

floyd