文章

1

粉丝

72

获赞

4

访问

6.2k

头像
floyd算法 O(n^3)
推荐阅读
P1631 上海交通大学2019年机试题
发布于2022年3月24日 11:54
阅读数 6.2k

在Floyd算法更新最短路径的同时,更新最短路径之和

#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int num;
    cin>>num;
    int ans = 0;
    int ** mpt = new int* [num];
    for(int i = 0; i < num; i ++){
        mpt[i] = new int [num];
        for(int j = 0; j < num; j ++){
            cin>>mpt[i][j];
            if(i < j)
                ans += mpt[i][j] * i;
            else
                ans += mpt[i][j] * j;
        }
    }
    for(int k = num - 1; k >= 0; k --)
        for(int i = 0; i < num; i ++)
            for(int j = i + 1; j < num; j ++)
                if(mpt[i][j] > mpt[i][k] + mpt[k][j]){
                    int coef = min(i, k);
                    ans = ans - 2 * coef * (mpt[i][j] - mpt[i][k] - mpt[k][j]);
                    mpt[j][i] = mpt[i][j] = mpt[i][k] + mpt[k][j];                    
                }
    cout<<ans;
    return 0;
}

 

登录查看完整内容


登录后发布评论

2 条评论
GlaucusD VIP
2024年2月28日 14:27

O(^3)能通过吗

赞(0)

snake : 回复 GlaucusD: n最大是500,O(n^3)复杂度可以的

2024年2月28日 15:40