离散数学实践三判别图的连通性【JAVA实现】

news2025/1/11 5:55:06

文章目录

  • 思路
  • 重要算法&Warshall 算法
    • 代码
  • 全部代码
  • 效果展示

思路

  • 对于给定的邻接矩阵 A,可以用可达矩阵 Warshall 算法求出 A 所表示的图的可达矩阵 P。
    • 对于可达矩阵 P 来说,如果 P 的所有元素均为 1 1 1,则所给的有向图是强连通的;
    • 对于 P 的所有元素(除主对角线元素外) P i j P_{ij} Pij 来说,均有: P i j + P i j > 0 P_{ij}+P_{ij}>0 Pij+Pij>0,则所给有向图是单向连通的。
    • 当所给有向图既不是强连通的,又不是单向连通的时候,我们改造邻接矩阵为:对于矩阵 A 中所有的元素(除主对角线的元素外) a i j a_{ij} aij,若 a i j = 1 a_{ij}=1 aij=1 a j i = 1 a_{ji}=1 aji=1,则 a i j = a j i = 1 a_{ij}=a_{ji}=1 aij=aji=1
    • 对于这样改造之后所得到的新的矩阵 A ′ A' A A ′ A' A相当于原有向图忽略方向之后所得到的无向图的邻接矩阵),再用方法进行判断,当 P ′ P' P的所有元素(除主对角线的元素外)均为 1 1 1时,原有向图是弱连通图;
    • 否则,原有向图是不连通的。

重要算法&Warshall 算法

在这里插入图片描述

  • 认真看图,认真体会

代码

public static void warshall(int[][] matrix) {
    int cols=0,rows=0,i=0;
    for(cols=0;cols<matrix.length;cols++) {
        for(rows=0;rows<matrix.length;rows++) {
            if(matrix[rows][cols]==1) {
                for(i=0;i<matrix.length;i++) {
                    matrix[rows][i]=matrix[rows][i] | matrix[cols][i];
                }
            }
        }
    }
}

全部代码

package 离散数学;

import java.util.Scanner;

/**
 * @author 缘友一世
 * date 2022/12/27-14:50
 */
public class demo03 {
    public static void main(String[] args) {
        int nums=0;
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入结点的个数:");
        if(scanner.hasNextInt()) {
            nums=scanner.nextInt();
        }
        int[][] matrix=new int[nums][nums];
        System.out.println("请输入"+nums+"阶矩阵的值[以空格隔开]:");
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix[i].length;j++) {
                if(scanner.hasNextInt()) {
                    matrix[i][j]= scanner.nextInt();
                }
            }
        }
        warshall(matrix);
        display(matrix);
        int res = estimate(matrix);
        if(res==1) {
            System.out.println("该图为强连通图!");
        }else if(res==0) {
            System.out.println("该图为单向连通图!");
        }else if(res==-1){
            transform(matrix);
            System.out.print("改造后");
            display(matrix);
            res=estimate02(matrix);
            if(res==1) {
                System.out.println("原有向图是弱连通的!");
            }else {
                System.out.println("原有向图是非连通的!");
            }
        }
    }
    public static void warshall(int[][] matrix) {
        int cols=0,rows=0,i=0;
        for(cols=0;cols<matrix.length;cols++) {
            for(rows=0;rows<matrix.length;rows++) {
                if(matrix[rows][cols]==1) {
                    for(i=0;i<matrix.length;i++) {
                        matrix[rows][i]=matrix[rows][i] | matrix[cols][i];
                    }
                }
            }
        }
    }
    public static void display(int[][] matrix) {
        System.out.println("可达矩阵为:");
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix.length;j++) {
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
    }
    public static int estimate(int[][] matrix) {
        int flag=1;
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix.length;j++) {
                if(matrix[i][j]!=1) {
                    flag=-1;
                }
            }
        }
        //标志未改变,所以为强连通图
        if(flag==1) {
            return flag;
        }
        flag=0;//标记为单向连通
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix.length;j++) {
                if(i!=j && !(matrix[i][j]+matrix[j][i]>0)) {
                    flag=-1;
                }
            }
        }
        //单向连通图
        if(flag==0) {
            return flag;
        }
        //否则为弱连通
        return flag;
    }
    public static int estimate02(int[][] matrix) {
        int flag=1;
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix.length;j++) {
                if(i!=j && matrix[i][j]!=1) {
                    flag=-1;
                    return flag;
                }
            }
        }
        return flag;
    }
    public static void transform(int[][] matrix) {
        for(int i=0;i<matrix.length;i++) {
            for(int j=0;j<matrix.length;j++) {
                if(i!=j && (matrix[i][j]==1 || matrix[j][i]==1)){
                    matrix[i][j]=matrix[j][i]=1;
                }
            }
        }
    }
}

效果展示

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台,不用配置各种运行环境

Mini Admin 完整代码下载地址&#xff1a;Python实现的一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台 Mini Admin,一个简洁轻快的后台管理框架.支持拥有多用户组的RBAC管理后台 &#x1f680; 应用场景&#xff1a;2-5人的管理团队&#xff0c;需要管理的资源数…

Mysql 慢日志处理

勿以恶小而为之&#xff0c;勿以善小而不为---- 刘备 有时候我们需要排查执行缓慢的SQL语句&#xff0c;这就用到了mysql慢查询日志。 开启慢查询日志的方式有两种&#xff1a;临时开启和永久开启。 开启慢查询日志功能可能需要mysql的版本达到5.7 查看版本号 select VERSI…

linux常用命令-路径切换及查看

切换路径-cd 我们可以使用cd&#xff08;change directory&#xff0c;切换目录&#xff09;的命令来进行目录切换 常规 其命令格式为 cd [相对路径或绝对路径] 例如&#xff1a; // 使用相对路径&#xff0c;切换到postfix目录下 cd ../postfix// 使用绝对路径切换到/var/…

centos7安装zabbix5.0

zabbix官网&#xff1a;https://www.zabbix.com/ 安装Zabbix存储库 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm yum clean all安装Zabbix server&#xff0c;Web前端&#xff0c;agent yum install zabbix-server-mys…

2023年天津农学院专升本专业课考试考场安排与东西校区入校须知

天津农学院2023年高职升本科专业课考试考场安排等事宜的通知一、考试时间及考场分布情况天津农学院专升本专业课考试2022年12月31日上午在天津农学院东、西校区进行&#xff0c;每位考生请按照准考证上标注的地点参加考试即可&#xff0c;考场安排及考场分布图详见。天津农学院…

docker 安装mysql数据库

docker安装 如果不知道docker怎么安装的&#xff0c;请看docker安装教程 docker 安装mysql 拉取镜像 docker pull mysql:5.7在本地创建目录&#xff08;存放数据库文件&#xff09; 容器中的文件&#xff0c;映射到宿主机。 mkdir -p ./mysql/data ./mysql/logs ./mysql/…

FineRrport填报重复数据校验

参考&#xff1a; 校验填报页面的数据是否重复- FineReport帮助文档 - 全面的报表使用教程和学习资料 联立多字段校验是否与数据库中数据重复- FineReport帮助文档 - 全面的报表使用教程和学习资料 1、校验填报页面数据是否重复&#xff08;多列&#xff09; 1&#xff09…

Unity Recorder的使用讲解

Unity Recorder的使用讲解使用目的插件下载插件位置窗口基本介绍基本设置选项录制列表Animation Clip参数讲解Movie 电影模式参数介绍SourceGameViewTargeted Camera360ViewRender Texture AssetOutPut ReslutionInclude AudioFlip VerticalTexture SamplingFormatMedia File F…

智慧餐饮远程监控解决方案,让您吃的放心吃的安心

一、行业背景随着国民经济的提高&#xff0c;人们的生活水平也随之提升。近几年&#xff0c;食品安全问题频发&#xff0c;大家也开始对食品安全问题重点关注&#xff0c;尤其是食品生产企业、餐饮单位或学校食堂。自2014年开始&#xff0c;国家食品药品监督管理总局就以及开展…

Docker 概述

系列文章目录 文章目录系列文章目录前言Docker平台用Docker可以做什么Docker架构The Docker daemonThe Docker clientDocker DesktopDocker registriesDocker objectsImagesContainers总结前言 Docker是为开发、运行应用而生的开放的平台。Docker使你可以将应用从依赖中分离&a…

别在用BigDecimal给自己挖坑了!

前言 工作中&#xff0c;我们都会用到BigDecimal来进行金额计算&#xff0c;但是他有许多坑&#xff0c;可能针对新手不注意的话&#xff0c;就给自己多加几个bug了。一起来看看吧。 创建 new BigDecimal()还是BigDecimal#valueOf()&#xff1f; 创建对象的时候应该使用Big…

【Spring【IOC】】——15、使用@PropertySource加载配置文件

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

Java8中Optional类入门-替代null避免冗杂的非空校验

场景 Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验&#xff1a; Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验_霸道流氓气质的博客-CSDN博客 上面在讲Guava时讲过Optional&#xff0c;下面做具体的入门示例讲解…

深度学习笔记:python的numpy和matplotlib库

1 numpy库 numpy为python数学计算库&#xff0c;里面的数组类提供大量便捷的数组和矩阵运算方法 创建numpy数组&#xff1a; import numpy as np x np.array([1.0, 2.0, 3.0])创建二维数组&#xff1a; import numpy as np a np.array([[1, 2], [3, 4]]) a.shape # outpu…

bWAPP靶场搭建——直接使用虚拟机镜像导入配置

一、bWAPP简介 bwapp是一款非常好用的免费的、开源漏洞演示学习平台;它有100多个网络错误&#xff01;且它涵盖了所有已知的主要web漏洞&#xff0c;包括OWASP Top 10项目的所有风险。 bWAPP是一个使用MySQL数据库的PHP应用程序&#xff1b;它可以通过Apache/IIS和MySQL托管在L…

优维低代码:关联微应用和Feature Flags 特性开关

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 连载…

图论(1):单源最短路的建图方式

一、单源最短路算法 最短路算法_yan__kai_的博客-CSDN博客 二、例题 1.acwing1129 题意解读&#xff1a;走过一条路存在花费c&#xff0c;求最小费用即求最短路。无向图 直接背模板&#xff1a; #include<iostream> #include<algorithm> #include<cstring&…

环形轨道运料电动葫芦无线控制系统的组成与功能

一&#xff0e;关于环形轨道运料电动葫芦的控制 目前电动葫芦的控制部分都是由PLC完成的&#xff0c;每个电葫芦内都有一台PLC&#xff0c;主站PLC一般设置在地面控制机柜内。由于电葫芦是在半空中移动工作的&#xff0c;与地面PLC的通讯问题一直是电葫芦设备运行中棘手的问题…

虚拟人,会成为品牌下一次逆势的解药吗?

如果说2021年是虚拟偶像的崛起元年&#xff0c;那2022可以称得上是爆发期了&#xff0c;一方面&#xff0c;定位国风、时尚博主、模特、歌手的虚拟偶像数量激增&#xff0c;被冠以“首位”、“行业第一”等称号的新面孔轮番出道&#xff1b;其次&#xff0c;虚拟人与品牌的商业…

不同Excel多列对比记录新增、修改、删除和无变化的行,并生成对比报告

执行【Exce数据对比.exe】&#xff0c;打开界面如图选择要对比的Excel文件和被对比的Excel文件&#xff0c;输入要对比Sheet页的需要&#xff08;注意&#xff0c;Sheet需要从0开始&#xff09;输入主键列和被对比的列。主键列和被对比列均为二维列表&#xff0c;列的索引从0开…