检测图中的所有圆圈

2024-04-06

我有一个存储在 Map 数据结构中的有向图,其中键是节点的 ID [value]是key节点所指向的节点的nodeId数组。

Map<String, String[]> map = new HashMap<String, String[]>();
map.put("1", new String[] {"2", "5"});
map.put("2", new String[] {"3"});
map.put("3", new String[] {"4"});
map.put("4", new String[] {"4"});
map.put("5", new String[] {"5", "9"});
map.put("6", new String[] {"5"});
map.put("7", new String[] {"6"});
map.put("8", new String[] {"6"});
map.put("9", new String[] {"10"});
map.put("10", new String[] {"5"});
map.put("11", new String[] {"11"});

我编写了一个递归搜索算法,试图找到图中的圆圈。

Set<String> nodes = map.keySet();

    for(String node : nodes) {
        List<String> forbiddens = new ArrayList<>(); // This list stores the touched nodes, during the process.
        forbiddens.add(node);
        recursiveSearch(node, forbiddens);
    }

该函数由上面的代码调用。

private void recursiveSearch(String nodeId, List<String> forbiddens) {
    String[] neighbours = map.get(nodeId); // The given node's neighbours
    for(String neighbour : neighbours) {
        for(String forbidden : forbiddens) {
            if(neighbour.equals(forbidden)) {
                ways.add( getClone(forbidden) ); //getClone returns the copy of a given List, "ways" is a List<List<String>> which contains the lists of paths which are leading to a circle in the graph
                return;
            }
        }
        forbiddens.add(neighbour);
        recursiveSearch(neighbour, forbiddens);
        forbiddens.remove(neighbour);
    }
}

有些路径包含我想删除的额外节点(不在圆圈中)。 我想请求帮助从“方式”列表中选择节点以获得圆的实际节点。

这个算法能找到图中的所有圆圈吗?


由于有向图中的圆圈表示强连通分量,因此您可以使用维基百科页面上引用的任何算法来查找强连通分量https://en.wikipedia.org/wiki/Strongly_connected_component https://en.wikipedia.org/wiki/Strongly_connected_component- 例如 Tarjan 的算法基于深度优先搜索:https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm

编辑:强连接组件可能包含多个彼此共享节点的圆。因此,必须对每个组件进行手动检查,但应该很容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检测图中的所有圆圈 的相关文章

  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供

随机推荐

  • 使用 AWS ECS 服务和 Elastic LoadBalancer 向公共公开多个端口

    我有公开多个端口的服务 它在 kubernetes 上运行良好 但现在我们将其移至 AWS ECS 看来我只能通过负载均衡器公开端口 并且每个服务 任务只能使用 1 个端口 即使 docker 定义了多个端口我也必须选择一个端口 Add t
  • 处理 nil 对象和属性的最佳实践是什么?

    说我有一个User对象 它有一个email财产 我需要他们的大写最后一个字母email u User find 1 letter u email upcase last If u or email is nil在这个链中 然后我得到一个No
  • 为什么在 Android 上重定向 stdout/stderr 不起作用?

    我下载了 SDL 1 3 并在我的 android 2 2 设备上将其与 OpenGL ES 一起进行了测试 它工作正常 但我没有得到输出printf来电 我尝试了下面的命令 如安卓开发者页面 http developer android
  • 隐藏datagridview winform中的默认灰色列

    当数据不可用时 有什么方法可以删除或隐藏 winforms datagrid 灰色区域吗 其次 如何删除 隐藏默认的灰色列 dataGridView1 DataSource oresult dataGridView1 Columns Id
  • 是否有可用的公共 UDDI 注册中心?

    我目前正在尝试掌握 UDDI 并希望使用查询 API 运行一些示例 但我找不到可以使用 SOAP 消息查询的公共注册表 IBM Microsoft 和 SAP 几年前曾托管公共 UDDI 服务器 但后来已停止使用 I know xmetho
  • 同一行上的两个 Div 并居中对齐

    我有两个像这样的div div style border 1px solid 000 Div 1 div div style border 1px solid red Div 2 div 我希望它们显示在同一行 所以我使用float lef
  • 意外的顶级错误

    我一直在尝试许多解决方案 甚至启用了 multiDexEnabled true 但仍然收到此错误 UNEXPECTED TOP LEVEL ERROR 这是我的构建 android compileSdkVersion 22 buildToo
  • C 字符串与等号的比较

    我有这个代码 char name George if name George printf It s George 我认为c字符串不能与 标志 我必须使用strcmp 由于未知原因 当我使用 gcc 版本 4 7 3 编译时 此代码有效 我
  • Web 服务必须注册吗?

    我正在学习网络服务 我读过的大多数资源都讨论了如何在网络服务准备好供其他人使用时对其进行注册 使用该服务是否需要注册网络服务 例如 假设我在公司 Intranet 上有一个 Web 应用程序 并且我创建了另一个 Web 服务应用程序 该应用
  • 在程序集“”中发现了不止一种迁移配置类型。指定要使用的名称。关于添加迁移

    在包管理器控制台中 我正在尝试更新我的数据库 当我输入这个命令时 add migration Migration1 我明白了 在程序集中发现了不止一种迁移配置类型 我的项目 POCO 指定要使用的名称 我用谷歌搜索了这个错误 我得到了这个
  • 如何从 XMLHttpRequest 获取进度

    是否可以获得 XMLHttpRequest 的进度 上传的字节数 下载的字节数 当用户上传大文件时 这对于显示进度条很有用 标准 API 似乎不支持它 但也许任何浏览器中都有一些非标准扩展 毕竟 这似乎是一个非常明显的功能 因为客户端知道上
  • sharepoint aspx 页面的隐藏代码在哪里?

    毫无疑问 我在这里遗漏了一些非常明显的东西 但我是 sharepoint 的新手 所以请耐心等待 我已经成功添加了一个母版页 创建了一个内容类型 并为我的自定义内容类型创建了一个 aspx 页面 但我找不到它的 cs 文件 在共享点解决方案
  • 扩展 maxLines 属性时自动滚动多行 TextFormField

    我正在实现一个 TextFormField 其 maxLines 属性设置为 3 当用户从第四行开始时 如何使 TextFormField 向下滚动 目前 光标不再可见 直到用户手动向下滚动 有没有办法自动执行此操作 这种行为实际上在 fl
  • 动态算法与贪婪算法:关于 Neil G 对同一主题的回答的争论

    我试图理解动态算法和贪婪算法之间的区别 并且这个答案由Neil G很有帮助 https stackoverflow com a 13713735 2715083但是 他的一句话却引起了评论区的热议 动态规划和贪心算法之间的区别在于 动态规划
  • 将字符串替换为具有不同 html 但相同文本的匹配字符串

    String1 img alt src http abcghgds com justin bieber ferns 650 430 jpg width 650 height 430 Have you seen a href http www
  • Makefile - 为什么读取命令不读取用户输入?

    我的 Makefile 中有以下代码 Root Path echo What is the root directory of your webserver Eg Server htdocs read root path echo root
  • 为什么“无法翻译 LINQ 表达式 'x'”?我没有使用“Where()”

    当我执行以下代码时 出现错误 System InvalidOperationException LINQ 表达式 DbSet Where u gt u NormalizedEmail ToLower 0 u PasswordHash Seq
  • 类实例作为静态属性

    Python 3 不允许您在其主体内引用类 方法中除外 class A static attribute A def init self 这就提出了一个NameError在第二行 因为 A is not defined 备择方案 我很快找到
  • 如何处理弹性搜索结构化查询中的通配符

    我的用例需要使用尾随通配符查询我们的弹性搜索域 我想了解您对在查询中处理此类通配符的最佳实践的看法 您认为添加以下子句对于查询来说是一个很好的做法吗 query query string query attribute postfix an
  • 检测图中的所有圆圈

    我有一个存储在 Map 数据结构中的有向图 其中键是节点的 ID value 是key节点所指向的节点的nodeId数组 Map