Warshall算法代码实现
直接模拟,枚举每一列,如果邻接矩阵中第i行第j列为1,那么就将第j行的所有元素加到第i行上面去,当然这是逻辑加,也就相当于或运算。
代码如下
#include<bits/stdc++.h>
using namespace std;
int arr[1000][1000]; // 存邻接矩阵
int main(void)
{
int n, m;
cin >> n >> m; // 读入矩阵边长
for (int i = 1; i <= n; i++) // 读入矩阵
for (int j = 1; j <= m; j++)
cin >> arr[i][j];
for (int j = 1; j <= n; j++) // 枚举每一列
for (int i = 1; i <= n; i++) {
if (arr[i][j]) { // 如果为1,则将第i行每项和第j行取或
for (int z = 1; z <= n; z++) {
arr[i][z] |= arr[j][z];
}
}
}
for (int i = 1; i <= n; i++) { // 输出矩阵
for (int j = 1; j <= n; j++) {
cout << arr[i][j] << " ";
}
cout << endl ;
}
return 0;
}