`
shenyu
  • 浏览: 122630 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

图-传递闭包

阅读更多

图的传递闭包是指修正后的邻接矩阵表示的图。(见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);
	}
}
 
3
0
分享到:
评论

相关推荐

    图论- 图的连通性- 传递闭包.rar

    传递闭包是图的连通性理论中的一个核心概念,尤其在有向图(也称为有向网络)的分析中具有重要意义。 首先,我们要理解“连通图”的概念。在一个无向图中,如果任意两个不同的节点之间都存在路径,则称该图为连通图...

    极小S-负传递闭包的一个求解方法

    在给定的文件信息中,提到的研究内容涉及了模糊逻辑、模糊关系以及负传递闭包的相关知识点。以下是对文件中知识点的详细解释。 首先,标题中提到的“极小S-负传递闭包”的概念是模糊逻辑领域中的一个高级主题。在...

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

    离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...

    离散实验报告求有限集上给定关系的自反、对称和传递闭包

    离散实验报告求有限集上给定关系的自反、对称和传递闭包 在离散数学实验报告中,我们将学习如何求有限集上给定关系的自反、对称和传递闭包。这些概念是离散数学的重要组成部分,对于理解关系闭包的性质和应用具有...

    传递闭包的实现 C语言

    传递闭包是图论中的一个概念,特别是在有向图中,它表示了图中所有节点间的可达性。在数学上,传递闭包是关系R的一种扩展,使得对于任何节点i和j,如果存在一系列节点i到j的路径,使得沿着这些路径应用关系R后,最终...

    传递闭包matlab程序

    ### 传递闭包Matlab程序知识点详解 #### 一、模糊聚类分析与传递闭包算法简介 在数据挖掘和模式识别领域,模糊聚类分析是一种广泛应用的技术,它通过将对象划分为不同的模糊集合来揭示数据中的结构。与传统的硬...

    c++求传递闭包

    在图论中,传递闭包(Transitive Closure)是针对有向图的一种特殊运算,其目的是找出图中任意两个顶点间是否存在路径。简单来说,如果存在一条从顶点 \( i \) 到顶点 \( j \) 的路径,则在传递闭包后的图中,从顶点...

    利用Warshall_算法求二元关系的可传递闭包

    《利用Warshall算法求二元关系的可传递闭包》 在离散数学中,二元关系是一个重要的概念,它描述了集合中的元素之间是否存在某种特定的联系。当需要研究这些关系并探究其性质时,有时我们需要计算关系的传递闭包。...

    江西财经大学关系的传递闭包

    关系的传递闭包是图论和离散数学中的一个重要概念,它在计算机科学,特别是数据库理论和算法设计中有着广泛的应用。在这个实验中,我们主要关注如何使用C++语言实现关系的传递闭包。 首先,关系的传递闭包是指在一...

    Warshall传递闭包算法

    Warshall传递闭包算法,使用C++实现Warshall传递闭包算法,对正在学习算法的同学应该挺有帮助的

    传递闭包的C语言编程实现

    离散数学中传递闭包是用Warshall算法求的,此程序正式这种算法的C语言实现

    传递闭包实现

    传递闭包的实现通常涉及到图算法,其中最常见的方法之一是使用Floyd-Warshall算法或者邻接矩阵的方式进行计算。下面我们就通过给出的部分代码示例来了解如何实现传递闭包。 ### Java代码分析 这段Java代码主要实现...

    用C语音实现自反,对称和传递闭包运算

    自反、对称和传递闭包运算实现 本文主要介绍了使用 C 语言实现自反闭包、对称闭包和传递闭包运算的方法和算法。通过实验和编程,了解关系运算的原理和实现过程。 1. 自反闭包的设计 自反闭包是关系运算中的一种...

    ios-switf 闭包与代理.zip

    本资料包“ios-swift 闭包与代理.zip”主要关注两个核心概念:闭包(Closure)和代理(Delegate),这些都是Swift中处理事件和数据传递的关键机制,尤其对初学者来说极其重要。 首先,我们来深入理解闭包。闭包是...

    传递闭包warshall算法java实现

    Warshall算法是由美国计算机科学家Stephen Warshall于1962年提出的,它主要用于计算有向图的所有节点对之间的传递闭包。在图中,如果存在一条从节点i到节点j的路径,我们称节点i可以到达节点j。而传递闭包是指在有向...

    C++编写warshall算法的传递闭包

    在计算机科学中,Warshall 算法是一种常用的图算法,用于计算图的传递闭包。传递闭包是指图中所有可能的路径的集合。 Warshall 算法的传递闭包可以用来解决许多实际问题,如计算二分图的最大匹配、计算图的-...

    判断模糊矩阵传递性并计算传递闭包matlab实现

    做模糊聚类分析时判断模糊矩阵传递性并计算传递闭包MATLAB实现,,可以算出模糊传递矩阵,当矩阵满足自反性对称性时为等价矩阵

    C语言实现三种闭包算法(传递,自反,对称闭包)

    1. **传递闭包**:在一个关系集合中,如果对于所有的元素a、b和c,只要a与b有关系且b与c有关系,那么a与c也一定有关系,这样的关系被称为传递闭包。在图论中,这相当于寻找最长路径或可达性。 2. **自反闭包**:...

    关系概念、传递闭包概念及warshall算法c++程序

    Warshall算法是一种用于计算传递闭包的有效方法,由计算机科学家Alan J. Perlis的研究生Marshall Warren Floyd和Stephen Warshall独立发展出来。该算法在图论和离散数学中有广泛应用,特别是在处理布尔矩阵(关系的...

Global site tag (gtag.js) - Google Analytics