文章
5
粉丝
100
获赞
2
访问
48.5k
复杂度到了n^4,懒得优化了。
#include<iostream>
#include<algorithm>
using namespace std;
int len;
int A[501][501];
int main(){
int len;
cin>>len;
int A[len][len];
for(int i=0; i<len; i++){
for(int j=0; j<len; j++) cin>>A[i][j];
}
int res = 0;
for(int set=1; set<len-1; set++){
for(int k=set; k<len; k++){
for(int i=set; i<len; i++){
for(int j=set; j<len; j++) if(A[i][k]+A[k][j] < A[i][j]) A[i][j] = A[i][k]+A[k][j];
}
}
for(int i=set; i<len; i++){
for(int j=set; j<len; j++) res += A[i][j];
}
}
cout<<res;
}
登录后发布评论
万一删除某个节点之后,导致某两个点的最短距离变大了,此时还能用之前已经算得的最短距离的。看老哥的代码好像是这样的。