图的传递闭包是指修正后的邻接矩阵表示的图。(见Graph 图-邻接矩阵法
)
在多个顶点的有向图中,每个顶点可以到按照方向到达一定的节点,这叫图的连通性。有种方法直接告诉我们,图中的两个节点是否可以联通,这里说的是WarShall算法。
WarShall的基本原理是,如果A可以到达B,且C可以到达A,则C可以到达B。通过对邻接矩阵的修正可以做到这点。随然这里举例是将两步可并成一步,但数学上可以证明这种修正可以达到任意步骤。
下面是代码:
class WarShall {
private boolean[][] adjMat;
WarShall(int size) {
adjMat = new boolean[size][size];
}
void connect(int from, int to) {
adjMat[from][to] = true;
}
boolean isConnect(int from, int to) {
return adjMat[from][to];
}
void warshall() { //warshall算法
for(int y=0; y<adjMat.length; y++) //查找每一行
for(int x=0; x<adjMat.length; x++) // 查找每个单元格
if(adjMat[y][x]) //如果 y 可以到达 x
for(int z=0; z<adjMat.length; z++) //查找所有行的y列
//如果 z 可以到达y ,说明z 可以直接到达x
if(adjMat[z][y]) adjMat[z][x] = true;
}
boolean[][] getConnections() {
return adjMat;
}
public static void main(String[] args) {
WarShall w = new WarShall(5);
w.connect(0,2);
w.connect(1,0);
w.connect(1,4);
w.connect(3,4);
w.connect(4,2);
for(boolean[] a: w.getConnections()) {
for(boolean b: a) System.out.print(b + " ");
System.out.println();
}
w.warshall();
System.out.println("==================");
for(boolean[] a: w.getConnections()) {
for(boolean b: a) System.out.print(b + " ");
System.out.println();
}
assert w.isConnect(3,2);
}
}
分享到:
相关推荐
传递闭包是图的连通性理论中的一个核心概念,尤其在有向图(也称为有向网络)的分析中具有重要意义。 首先,我们要理解“连通图”的概念。在一个无向图中,如果任意两个不同的节点之间都存在路径,则称该图为连通图...
在给定的文件信息中,提到的研究内容涉及了模糊逻辑、模糊关系以及负传递闭包的相关知识点。以下是对文件中知识点的详细解释。 首先,标题中提到的“极小S-负传递闭包”的概念是模糊逻辑领域中的一个高级主题。在...
离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...
离散实验报告求有限集上给定关系的自反、对称和传递闭包 在离散数学实验报告中,我们将学习如何求有限集上给定关系的自反、对称和传递闭包。这些概念是离散数学的重要组成部分,对于理解关系闭包的性质和应用具有...
传递闭包是图论中的一个概念,特别是在有向图中,它表示了图中所有节点间的可达性。在数学上,传递闭包是关系R的一种扩展,使得对于任何节点i和j,如果存在一系列节点i到j的路径,使得沿着这些路径应用关系R后,最终...
### 传递闭包Matlab程序知识点详解 #### 一、模糊聚类分析与传递闭包算法简介 在数据挖掘和模式识别领域,模糊聚类分析是一种广泛应用的技术,它通过将对象划分为不同的模糊集合来揭示数据中的结构。与传统的硬...
在图论中,传递闭包(Transitive Closure)是针对有向图的一种特殊运算,其目的是找出图中任意两个顶点间是否存在路径。简单来说,如果存在一条从顶点 \( i \) 到顶点 \( j \) 的路径,则在传递闭包后的图中,从顶点...
《利用Warshall算法求二元关系的可传递闭包》 在离散数学中,二元关系是一个重要的概念,它描述了集合中的元素之间是否存在某种特定的联系。当需要研究这些关系并探究其性质时,有时我们需要计算关系的传递闭包。...
在当今的信息时代,关系的传递闭包概念在计算机科学的各个领域中扮演着重要的角色。特别是在数据库理论、算法设计以及图论研究中,传递闭包作为基础工具,帮助我们理解和解决实际问题。本文将深入探讨在C++语言中...
Warshall传递闭包算法,使用C++实现Warshall传递闭包算法,对正在学习算法的同学应该挺有帮助的
离散数学中传递闭包是用Warshall算法求的,此程序正式这种算法的C语言实现
传递闭包的实现通常涉及到图算法,其中最常见的方法之一是使用Floyd-Warshall算法或者邻接矩阵的方式进行计算。下面我们就通过给出的部分代码示例来了解如何实现传递闭包。 ### Java代码分析 这段Java代码主要实现...
自反、对称和传递闭包运算实现 本文主要介绍了使用 C 语言实现自反闭包、对称闭包和传递闭包运算的方法和算法。通过实验和编程,了解关系运算的原理和实现过程。 1. 自反闭包的设计 自反闭包是关系运算中的一种...
本资料包“ios-swift 闭包与代理.zip”主要关注两个核心概念:闭包(Closure)和代理(Delegate),这些都是Swift中处理事件和数据传递的关键机制,尤其对初学者来说极其重要。 首先,我们来深入理解闭包。闭包是...
Warshall算法是由美国计算机科学家Stephen Warshall于1962年提出的,它主要用于计算有向图的所有节点对之间的传递闭包。在图中,如果存在一条从节点i到节点j的路径,我们称节点i可以到达节点j。而传递闭包是指在有向...
在计算机科学中,Warshall 算法是一种常用的图算法,用于计算图的传递闭包。传递闭包是指图中所有可能的路径的集合。 Warshall 算法的传递闭包可以用来解决许多实际问题,如计算二分图的最大匹配、计算图的-...
做模糊聚类分析时判断模糊矩阵传递性并计算传递闭包MATLAB实现,,可以算出模糊传递矩阵,当矩阵满足自反性对称性时为等价矩阵
1. **传递闭包**:在一个关系集合中,如果对于所有的元素a、b和c,只要a与b有关系且b与c有关系,那么a与c也一定有关系,这样的关系被称为传递闭包。在图论中,这相当于寻找最长路径或可达性。 2. **自反闭包**:...
Warshall算法是一种用于计算传递闭包的有效方法,由计算机科学家Alan J. Perlis的研究生Marshall Warren Floyd和Stephen Warshall独立发展出来。该算法在图论和离散数学中有广泛应用,特别是在处理布尔矩阵(关系的...