Floyed

多源最短路,Floyed本质是dp,通过不断的松弛操作来获得最优,时间复杂度O(N^3)。

    memset(w,0x3f,sizeof(w));/*初始化正无穷*/
    for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>w[i][j];
    for(int i=1;i<=n;i++)w[i][i]=0;/*自己到自己的距离为0*/
    for(int k=1;k<=n;k++){/*在最外层枚举中转点*/
        for(int i=1;i<=n;i++){
            if(i==k)continue;
            for(int j=1;j<=n;j++){
                if(i==j||j==k)continue;
                w[i][j]=min(w[i][j],w[i][k]+w[k][j]);
            }
        }
    }

Floyed可以用来传递闭包,即判断一点是否可以到达另一点。

    for(int k=1;k<=n;k++){
        for(int i=1;i<=n;i++){
            if(i==k)continue;
            for(int j=1;j<=n;j++){
                if(i==j||j==k)continue;
                w[i][j]|=w[i][k]&w[k][j];
            }
        }
    }
posted @ 2022-11-14 17:42  半步蒟蒻  阅读(96)  评论(0)    收藏  举报