Warshall算法进行传递闭包矩阵运算:
package javatest;
import java.util.Scanner;
public class Warshall {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[][] M = new int[n][n];
//输入要计算的数组
for (int i = 0; i < M.length; i++) {
for (int j = 0; j < M.length; j++) {
M[i][j] = input.nextInt();
}
}
//进行传递闭包的矩阵运算
for (int i = 0; i < M.length; i++) { //第一层循环,用来换列,逐列检查
for (int j = 0; j < M.length; j++) { //第二层循环,用来换行
if(M[j][i] == 1){ //逐行检查这一列是否存在有1
for (int k = 0; k< M.length; k++) { //检查出1以后需进行逻辑相加
if(M[i][k] == 1){ //在需要逻辑相加的这一行逐列检查是否有1
M[j][k] = M[i][k]; //存在1则将被加行的对应列数赋值为1
}
}
}
}
}
//打印最终结果
for (int i = 0; i < M.length; i++) {
for (int j = 0; j < M.length; j++) {
System.out.print(M[i][j] + ",");
}
System.out.println();
}
}
}