java - 计算不相交的有向字母

标签 java arrays math directed-graph

我有一个 boolean[][]称为 matrix 的二维数组,它编码一个有向图,如果 matrix[i][j] == true ,则顶点 j 与顶点 i 相连(反之不一定成立)。
我正在尝试创建一个 Java 方法来确定我有多少个不相交的有向图。

因此对于示例,如果顶点 0 连接到顶点 1,并且顶点 2 连接到顶点 3 (<code>[{{0,0,0,0},{1,0,0,0},{0,0,0,0},{0,0,1,0}}]</code> would be the 2D array) ,我会有 2 个不相交的有向字母。

如果没有连接,不相交的二合字母数将等于顶点数。

最佳答案

从树中所有节点的列表开始。将这些视为您未访问的节点。

然后重复以下过程,直到您的未访问节点列表消失。

  1. 创建一个空集,即“节点集”,以表示存在于当前节点图中的节点。
  2. 从当前节点开始执行搜索。对于您在搜索中遇到的每个节点,将其从未访问节点列表中删除,然后:(1)如果该节点已存在于另一个节点集中,则合并当前节点集和该其他节点集并停止搜索该节点,或 (2) 如果该节点已存在于当前节点集中,则停止从该节点搜索,或 (3) 如果您从未见过该节点,则将其添加到当前节点集中。

此过程完成后,您的节点集对应于每个不相交图中唯一存在的节点,因此节点集的数量就是您寻求的值。

关于java - 计算不相交的有向字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694986/

相关文章:

java - 找不到现有变量的符号

java - 如何从天数转换为天数、周数、月数、年数(以每日储蓄计)

c++ - Casteljau 算法 - 实例

java - 按日期(字符串)对 GAE 的查询结果进行排序

java - 在 Java 中,如何录制发送到扬声器的声音输出?

相当于 JavaScript 的 String.match() 的 Java

javascript - 在数组上均匀分布 bool 值(Javascript)

javascript - 在 Javascript 中拆分和分配多个值的更好方法?

c++ - 具有虚拟子方法的二维对象数组 -> "vtable referenced from"错误

javascript - 使用 Leap Motion SDK V2 检测拳头