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;

}

用java求可达矩阵_ISM算法(邻接矩阵求可达矩阵)Java实现相关推荐

  1. python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例

    本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...

  2. c语言分治法求众数重数_分治算法:求众数及其重数

    问题描述: 给定含有 n 个元素的多重集合 S,每个元素在 S 中出现的次数称为该元素的重数.多重集合 S 中重数最大的素称为众数.例如多重集合 S={1,2,2,7,2,7,5},其中众数是 2,其 ...

  3. 路程c语言,求最短路程(Prim算法)求C语言代码的解题

    #include #define max 10000 using namespace std; int main() { int sum=0;//总路程 int min, min_f , min_t, ...

  4. java数组求子集_回溯算法:求子集问题!

    给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums ...

  5. 算法:通过克鲁斯卡尔(Kruskal)算法,求出图的最小生成树

    之前我给大家分享过用普利姆(Prim)算法来求出图的最小生成树(点我去看看),今天我再给大家分享一个也是求图的最小生成树的克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,就相当于先 ...

  6. 数字拆分问题算法回溯_回溯算法:求子集问题!

    给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/le ...

  7. JAVA:实现线性丢番图方程求解器算法(附完整源码)

    JAVA:实现线性丢番图方程求解器算法 package com.thealgorithms.maths;import java.util.Objects;public final class Line ...

  8. JAVA:实现Aliquot Sum等分总和算法(附完整源码)

    JAVA:实现Aliquot Sum等分总和算法 package com.thealgorithms.maths; import java.util.stream.IntStream; public ...

  9. JAVA:实现Caesar凯撒密码算法(附完整源码)

    JAVA:实现Caesar凯撒密码算法 package com.thealgorithms.ciphers; import java.util.Scanner; public class Caesar ...

  10. 左神算法:求最大子矩阵的大小(Java版)

    本题来自左神<程序员面试代码指南>"求最大子矩阵的大小"题目. 题目 给定一个整型矩阵 map,其中的值只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1 ...

最新文章

  1. java----代理机制或动态类的生成
  2. U3D临时文件GICache巨大
  3. java中获取时间6,Java中获取指定日为星期几及其他日期操作(2)
  4. 前有教授被骗千万,后有某重点高校青年教师晒出月薪900的工资条,大学老师工资待遇如何?...
  5. VSCode 竟然可以无缝调试浏览器了!
  6. pythonista3安卓_Pythonista 3 app下载
  7. Django之form表单组件、cookie与session
  8. python字典变量定义_Python字典,函数,全局变量代码解析
  9. 第6 章 面向对象的程序设计
  10. 《21天学通Java(第7版)》—— 导读
  11. 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc
  12. ABAP 销售订单BAPI创建批导程序
  13. 2021Java面试题及答案整理(最新汇总版)
  14. 菲尔茨奖得主陶哲轩:瓜分数学成就 没有益处
  15. 数据结构与算法-进阶(十二)最短路径Dijkstra 算法
  16. 外显子测序数据分析流程
  17. 如何快速将CAD图纸转换成PDF文件?
  18. How to cover an IE windowed control (Select Box, ActiveX Object, etc.) with a DHTML layer.
  19. 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名...
  20. 网站忘记密码,如何找回 -- (前提浏览器保存过密码)

热门文章

  1. 华为鸿蒙2048小游戏,从零开始使用华为DevEco Studio编写2048小游戏
  2. php时间格式转换成时间戳,php把时间格式转换为时间戳的案例
  3. 工具类:获取两个经纬度的距离(米)
  4. SPSS基本数据处理(二)
  5. web前端素材整理汇总
  6. 【深度学习】简单地利用keras做车标识别
  7. 倍福---绝对值编码器位置保存
  8. 20170919_C++面试问题记录
  9. 分享一个好用的网页pdf打印插件
  10. 南航计算机英语面试经验,南航面试英文自我介绍