目录一、基本概念1、通路2、回路3、连通性4、邻接矩阵 5、可达矩阵(利用邻接矩阵求) 二、功能函数1、创建2、矩阵乘法3、求可达矩阵(因为后续判断需要,这里暂不将非零元素变为1) 4、计算长度为n的通路与回路 5、判断连通性(简便) 三、完整代码与样例1、完整代码2、样例一、基本概念1、通路在有向图G=中,顶点与边的交替序列2、回路特殊的通路,起点也是终点3、连通性强连通: 在有向图G=中,任意一对顶点都可以相互到达。单向连通性:在有向图G=中,任意一对顶点中,至少有一个顶点可以到达另一个顶点弱连通:对有向图G=,若忽略边的方向得到的无向图是强连通,则该有向图是弱连通 4、邻接矩阵利用二维数
一个流行的游戏是用铅笔画这些图,但是图中的每一条边都只能被画一次,在画图过程中铅笔不能离开纸面。难度更高的问题是,不光要一笔画完图,并且起点和终点还要落在同一处。如果我们将上面的三个图形都看作图数据结构,那么这个画图问题就是一个图论问题。如果在一个无向图中,找到一条路径,使得每一条边都被访问并且只被访问一次,那么这条路径就称为欧拉路径。如果起点与终点一致就成为欧拉回路,否则就是欧拉环游。我们能想到的第一个特性是,如果一个无向图要具有欧拉回路,那么图必须是连通的并且图中的每一个顶点的入度都必须是偶数 。这是因为,如果图不连通,那么就肯定有顶点无法被访问到;如果顶点的入度不为偶数,那么就会存在从一
前言你的qq密码是否在圆周率中出现?一个有意思的编码问题:假设密码是固定位数,设有nnn位,每位是数字0-9,那么这样最短的“圆周率”的长度是多少?或者说求一个最短的数字串定包含所有密码。理论一些定义:通过图中所有边恰好一次且行遍所有顶点的通路称为欧拉通路;通过图中所有边恰好一次且行遍所有顶点的回路称为欧拉回路;具有欧拉回路的无向图称为欧拉图;具有欧拉通路但不具有欧拉回路的无向图称为半欧拉图。求欧拉回路/通路,俗称一笔画问题,之前一直以为这个问题十分困难,直到慢慢学习揭开它的真面目。在离散课程中,学习到判断(半)欧拉图的充要条件是顶点的度数满足一定条件。具体如下必要性比较容易证明,充分性是通过
一、算法介绍及实现过程:程序的输入为对应图的结点数和图中与各结点相连的点的编号。(注:无向图中的多重边和自环需多次输入;有向图中的多重边需多次输入)程序的第一步是求出图的邻接矩阵。邻接矩阵反映了点与点之间的关系,通过输入各结点相连的点的编号,建立邻接矩阵,并打印出来。程序的第二步是判断图的连通性。我主要采用了DFS,即暴力递归的方法。无向图中若存在欧拉回路,则必然是连通的;有向图中若存在欧拉回路,则必然是强连通的。因此,二者均可采用同种遍历方法:从一点出发向下遍历,标记经过的点(遇到标记过的点,则直接跳过),最后检查是否所有的点均被标记。区别在于,无向图选取任意一点作为起始点,结果相同;但有向
1、题目描述蓝桥学院由 21栋教学楼组成,教学楼编号 11到 21。对于两栋教学楼 a和 b,当 a和 b互质时,a 和 b 之间有一条走廊直接相连,两个方向皆可通行,否则没有直接连接的走廊。小蓝现在在第一栋教学楼,他想要访问每栋教学楼正好一次,最终回到第一栋教学楼(即走一条哈密尔顿回路),请问他有多少种不同的访问方案?两个访问方案不同是指存在某个 i,小蓝在两个访问方法中访问完教学楼 i 后访问了不同的教学楼。提示:建议使用计算机编程解决问题。答案提交这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无
引言:前几天做的一个笔试,设计一个自动填充闭合回路像素的程序,笔试时没写完,下来后把整个程序写出来了。文章末尾有源工程项目地址,先看下源工程项目演示:闭合环检测+填充-CSDN直播Unity实现https://live.csdn.net/v/231924总共分两个部分:一:基于并查集检测回路首先要填充像素,要先检测是否有回路,即底下黑色的环,这边以八连通算回路标准。我们考虑用并查集算法思想进行检测。///检测闭合环算法voidInitA(){for(inti=0;i0&&numArray[i,j]==1&&numArray[i-1,j]==1){//当前格子上方if(!isUnion(i*10
Question:Result:88101236736021x21的图答案爆int也是够麻的Solve:图的遍历复杂度是21的阶乘,赛时不可能跑完,考虑DP首先21个点,用21位的二进制01串状压表示每一栋楼是否访问所以现在的问题就转化成了如何将一个含有1位1,20位0的二进制数变的21位都是1,这个就有点像19年的《糖果》了DP的基本思路:从初始状态开始,不断的去尝试下一个能到达的楼,并且将楼加入状态中(对应的楼的二进制位变为1),那么如果21位的二进制所有数都变为了1,就说明这是一种可行的路径,将这个路径计数到dp[(1之后状态转移方程dp[i][j]表示从状态i到j的路径数dp[i+(1
Question:Result:88101236736021x21的图答案爆int也是够麻的Solve:图的遍历复杂度是21的阶乘,赛时不可能跑完,考虑DP首先21个点,用21位的二进制01串状压表示每一栋楼是否访问所以现在的问题就转化成了如何将一个含有1位1,20位0的二进制数变的21位都是1,这个就有点像19年的《糖果》了DP的基本思路:从初始状态开始,不断的去尝试下一个能到达的楼,并且将楼加入状态中(对应的楼的二进制位变为1),那么如果21位的二进制所有数都变为了1,就说明这是一种可行的路径,将这个路径计数到dp[(1之后状态转移方程dp[i][j]表示从状态i到j的路径数dp[i+(1