2 条题解
-
0
B3611 【模板】传递闭包——题解
解题思路
使用 Floyd 的布尔形式。枚举中转点 ,若当前已知 能到 且 能到 ,就把 到 标为可达。按 依次加入可用中转点后,矩阵即为传递闭包。
复杂度分析
时间复杂度 ,空间复杂度 。
C++17 参考代码
#include <bits/stdc++.h> using namespace std; int a[105][105]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; 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++) if(a[i][k]) for(int j=1;j<=n;j++) if(a[k][j]) a[i][j]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cout<<a[i][j]<<(j==n?'\n':' '); } return 0; } -
0
#include <bits/stdc++.h> using namespace std; int a[105][105]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n; 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++) if(a[i][k]) for(int j=1;j<=n;j++) if(a[k][j]) a[i][j]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) cout<<a[i][j]<<(j==n?'\n':' '); } return 0; }
- 1
信息
- ID
- 4941
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者
粤公网安备44195502000195号