Transitive Closure of a Graph Using Floyd-Warshall Algorithm in Java2025年3月29日 | 阅读 4 分钟 在图论中,有向图的传递闭包是指顶点的可达性。传递闭包可以帮助我们确定网络中两个顶点之间是否存在路径。 Floyd-Warshall 算法是计算图的传递闭包的一种常用方法。除了通常用于加权图中的最短路径计算外,动态规划技术还可以修改用于解决传递闭包问题。正如本文将要看到的,这种方法可用于计算有向图的传递闭包。 问题陈述给定一个具有 V 个顶点的有向图,我们的任务是确定每个顶点是否可以从其他所有顶点到达。传递闭包可以用一个 V x V 的矩阵表示,其中
使用 Floyd-Warshall 算法计算传递闭包确定顶点 k 是否可以充当顶点 i 和 j 之间的桥梁。该矩阵最初配置为,如果存在从 i 到 j 的边(包括 i == j),则 closure[i][j] = 1,否则为 0。随后,算法会遍历每个潜在的中间顶点,确定是否可以通过建立中间顶点来形成间接路径。 算法构建一个 V x V 的二维矩阵 closure[][]。使用图的邻接矩阵来初始化此矩阵。如果 i 和 j 之间存在边,则将 closure[i][j] 设置为 1。如果不存在,则设置为零。另外,由于一个顶点始终可以到达自身,因此对于所有 i,都将 closure[i][i] 设置为 1。
文件名:TransitiveClosure.java 输出 Transitive closure of the given graph: 1 1 1 1 0 1 1 1 0 0 1 1 0 0 0 1 解释首先,在Java 代码中,使用Floyd-Warshall 算法为传递闭包初始化一个二维矩阵 closure[][],以存储从输入邻接矩阵复制的可达性信息。 对于每个条目,如果顶点 i 和 j 之间存在直接边,则 closure[i][j] 的初始值设置为 1,否则为 0。然后,该算法使用三个嵌套循环。 内部两个循环遍历所有顶点对 (i, j),以确定是否存在从 i 到 j 且经过 k 的路径,而外部循环遍历所有顶点 k,充当中间顶点。 如果 i 可以到达 k,并且 k 可以到达 j,则它会将 closure[i][j] 更改为 1,表示它们之间存在路径。最后,打印传递闭包矩阵,显示哪些顶点可以从其他顶点到达。 复杂度
结论Floyd-Warshall 算法是一种用于计算有向图传递闭包解决方案的协议。它通常应用于加权网络中的最短路径,但由于其系统搜索任意两个顶点之间所有路径的能力,因此非常适合传递闭包问题。此方法还通过保证可达性矩阵的覆盖率,成为图论中有用的辅助工具。 下一主题Java 中的数组旋转 |
这是 Google、Amazon、TCS、Accenture、Flipkart 等顶级 IT 公司面试中经常提出的问题。通过解决问题,人们希望检查应聘者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将...
阅读 4 分钟
在 Java 中,图形用户界面 (GUI) 在创建交互式应用程序方面起着至关重要的作用。GUI 编程的关键方面之一是布局管理器,它决定了组件如何在容器内排列。边框布局管理器就是这样一种布局管理器,它简化了...
阅读 4 分钟
多线程是 Java 中的一个强大概念,它允许我们创建并发程序,从而有效利用可用资源。理解多线程的一个经典例子是使用两个单独的线程打印奇数和偶数。在本节中,我们将探讨如何实现这一点...
5 分钟阅读
java.text.ChoiceFormat 是一个包含 equals() 函数的类。当比较两个 ChoiceFormat 对象时,ChoiceFormat 类用于确定比较的布尔值。语法:public boolean equals(Object obj_name) 参数:-其中 Obj 是一个参数,一个完全不同的 ChoiceFormat 对象用于比较,它……
阅读 2 分钟
在本文中,我们将介绍如何使用 Java Collections Framework 的 reverse() 函数来反转字符串。下面示例演示了使用 Collections.reverse() 来反转 Java 中的字符串。整个过程如下:使用 String.toCharArray 函数创建一个空...
阅读 4 分钟
JDK 8 引入了 DoublePredicate 接口。一个名为 DoublePredicate (java.util.function.DoublePredicate) 的函数式接口在其内部指定了三个默认方法和一个抽象方法。这个接口是 Predicate 接口的一个更专业的版本。因为它只有一个抽象方法 test (double value)...
阅读 3 分钟
Java 泛型是一个概念,可以在竞争性编程中有效地用于编写最优和可重用的代码。泛型使您能够声明类或接口,以及具有类型参数的方法,这些类型参数可以在之后在……期间用具体类型替换。
阅读 16 分钟
在本节中,我们将创建 Java 程序,将一个数字的各位相加,直到该数字变为个位数。该问题也称为数字根问题。示例假设 76345 是一个数字,我们需要找到它的各位数字之和,直到它变成...
阅读 3 分钟
Java 时间戳记录程序元素及其操作的创建、修改和更新时间。它们广泛用于金融应用程序、科学研究和其他需要精确时间数据的领域。Java 时间戳可用于计算、比较和识别时间...
阅读 4 分钟
在编程中,循环是一系列重复执行的指令,直到满足某个条件。在本节中,我们将通过示例讨论 Java 中的带标签循环。什么是 Java 中的带标签循环?标签是一个有效的变量名,它表示...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India