用java求可达矩阵_ISM算法(邻接矩阵求可达矩阵)Java实现
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实现相关推荐
- python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例
本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...
- c语言分治法求众数重数_分治算法:求众数及其重数
问题描述: 给定含有 n 个元素的多重集合 S,每个元素在 S 中出现的次数称为该元素的重数.多重集合 S 中重数最大的素称为众数.例如多重集合 S={1,2,2,7,2,7,5},其中众数是 2,其 ...
- 路程c语言,求最短路程(Prim算法)求C语言代码的解题
#include #define max 10000 using namespace std; int main() { int sum=0;//总路程 int min, min_f , min_t, ...
- java数组求子集_回溯算法:求子集问题!
给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums ...
- 算法:通过克鲁斯卡尔(Kruskal)算法,求出图的最小生成树
之前我给大家分享过用普利姆(Prim)算法来求出图的最小生成树(点我去看看),今天我再给大家分享一个也是求图的最小生成树的克鲁斯卡尔(Kruskal)算法 克鲁斯卡尔(Kruskal)算法,就相当于先 ...
- 数字拆分问题算法回溯_回溯算法:求子集问题!
给「代码随想录」一个星标吧! ❝ 认识本质之后,这就是一道模板题 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/le ...
- JAVA:实现线性丢番图方程求解器算法(附完整源码)
JAVA:实现线性丢番图方程求解器算法 package com.thealgorithms.maths;import java.util.Objects;public final class Line ...
- JAVA:实现Aliquot Sum等分总和算法(附完整源码)
JAVA:实现Aliquot Sum等分总和算法 package com.thealgorithms.maths; import java.util.stream.IntStream; public ...
- JAVA:实现Caesar凯撒密码算法(附完整源码)
JAVA:实现Caesar凯撒密码算法 package com.thealgorithms.ciphers; import java.util.Scanner; public class Caesar ...
- 左神算法:求最大子矩阵的大小(Java版)
本题来自左神<程序员面试代码指南>"求最大子矩阵的大小"题目. 题目 给定一个整型矩阵 map,其中的值只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1 ...
最新文章
- java----代理机制或动态类的生成
- U3D临时文件GICache巨大
- java中获取时间6,Java中获取指定日为星期几及其他日期操作(2)
- 前有教授被骗千万,后有某重点高校青年教师晒出月薪900的工资条,大学老师工资待遇如何?...
- VSCode 竟然可以无缝调试浏览器了!
- pythonista3安卓_Pythonista 3 app下载
- Django之form表单组件、cookie与session
- python字典变量定义_Python字典,函数,全局变量代码解析
- 第6 章 面向对象的程序设计
- 《21天学通Java(第7版)》—— 导读
- 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc
- ABAP 销售订单BAPI创建批导程序
- 2021Java面试题及答案整理(最新汇总版)
- 菲尔茨奖得主陶哲轩:瓜分数学成就 没有益处
- 数据结构与算法-进阶(十二)最短路径Dijkstra 算法
- 外显子测序数据分析流程
- 如何快速将CAD图纸转换成PDF文件?
- How to cover an IE windowed control (Select Box, ActiveX Object, etc.) with a DHTML layer.
- 查询出部门名称、部门的员工数、部门的平均工资、部门的最低收入雇员姓名和最高收入雇员的姓名...
- 网站忘记密码,如何找回 -- (前提浏览器保存过密码)