前言:传递闭包也是我们图论会遇到的,我们一般情况下会用弗洛伊德算法,但是复杂度太高了, n 3 n^3 n3 在一些题目中是会爆炸的,我们怎么去优化呢
没有优化的版本
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
const int N = 101;
int a[N][N];
int n;
int main(){
cin >> n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin >> a[i][j];
}
}
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//if(a[i][j]) break;
if(a[i][k] && a[k][j]){
a[i][j] = 1; //break;
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}