文章

5

粉丝

100

获赞

2

访问

48.5k

头像
Floyd算法,不难
P1631 上海交通大学2019年机试题
发布于2021年2月28日 22:50
阅读数 10.6k

复杂度到了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;
} 

 

登录查看完整内容


登录后发布评论

1 条评论
k.huang
2021年3月3日 19:48

万一删除某个节点之后,导致某两个点的最短距离变大了,此时还能用之前已经算得的最短距离的。看老哥的代码好像是这样的。

 

赞(0)