ISM算法(邻接矩阵求可达矩阵)Java实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

public class Main {

public static void main(String[] args) {
// 邻接矩阵
int adjacency[][] = { { 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 0 }, { 1, 0, 0, 1, 0 }, { 0, 0, 1, 0, 1 },
{ 1, 0, 0, 0, 0 } };
// 可达矩阵
int reachability[][] = null;

System.out.println("邻接矩阵:");
show(adjacency);
reachability = addUnit(adjacency);
show(reachability);
int n = 0;
do {
n++;
reachability = square(reachability);
reachability=format(reachability);
System.out.println("第"+n+"次布尔运算");
show(reachability);
} while (!equals(reachability, format(square(reachability))));

System.out.println("可达矩阵:");
show(reachability);

}

// 矩阵+单位矩阵
public static int[][] addUnit(int primitive[][]) {
int[][] result = new int[primitive.length][primitive.length];
for (int x = 0; x < primitive.length; x++) {
for (int y = 0; y < primitive[x].length; y++) {
result[x][y] = primitive[x][y];
}
}
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
if (i == j) {
result[i][j] = 1;
}
}
}
return result;
}

// 打印矩阵
public static void show(int matrix[][]) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + ",");
}
System.out.println();
}
System.out.println();
}

// 矩阵是否相等
public static boolean equals(int a[][], int b[][]) {
if (a.length != b.length) {// 行数是否相等
return false;
} else {
for (int i = 0; i < a.length; i++) {
if (a[i].length != b[i].length) {// i行列数是否相等
return false;
} else {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != b[i][j]) {// i行j列的数值是否相等
return false;
}
}
}
}
}
return true;
}

// 矩阵自乘
public static int[][] square(int primitive[][]) {
int[][] result = new int[primitive.length][primitive.length];
int[][] list = new int[primitive.length][primitive.length];
for (int x = 0; x < primitive.length; x++) {
for (int y = 0; y < primitive[x].length; y++) {
result[x][y] = primitive[x][y];
}
}
int temp;
for (int i = 0; i < result.length; i++) {
for (int n = 0; n < result[i].length; n++) {
temp = 0;
for (int j = 0; j < result[i].length; j++) {
temp += result[i][j] * result[j][n];
}
list[i][n] = temp;
}
}
return list;
}

// 格式化
public static int[][] format(int primitive[][]) {
int[][] result = new int[primitive.length][primitive.length];
for (int x = 0; x < primitive.length; x++) {
for (int y = 0; y < primitive[x].length; y++) {
result[x][y] = primitive[x][y];
}
}
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
if (result[i][j] > 0) {
result[i][j] = 1;
}

}
}
return result;
}
}

相关文档
最新文档