检测未连接图中的循环

2024-02-13

尽管关于这个主题有一些问题,但我需要一些更具体的建议。

我正在开发一些项目,我必须重命名一个实体。这意味着保存一个包含实体的旧名称和新名称的新对象。这就是软件的工作原理。

现在,我要做的是检查当有人尝试重命名对象时是否尝试循环依赖。例如:

A -> B
B -> C
C -> A

当有人试图将 C 重命名为 A 时,应该发出信号。

我不知道如何解决这个问题。我的想法是创建一个具有边 [A,B],[B,C],[C,A] 的有向图,并应用一些循环检测算法来查找循环依赖关系(Tarjan 或其他)。

考虑到图不会连接,这是否有效?可以有上述示例,然后:

E -> F
H -> J
X -> Y

我最终会得到很多未连接的边和一些循环。我应该首先找到较小的连通图并在每个图上应用任何算法,还是有可能只添加构建大图并对其应用算法?

检测我的示例的循环依赖关系的最快且推荐的方法是什么?

谢谢你!

Update我提出了以下 dfs 方法:

void DFS(int root, boolean[] visited){
        onStack = new boolean[N];
        edgeTo = new int[N];

        visited[root]=true;
        onStack[root] = true;

        for (int i=0; i<N; ++i){
            if (G[root][i]){ 
                if(!visited[i]){
                   DFS(i,visited);
                } else if (onStack[i]){
                   System.out.printf("%nCycle %n");
                }
          } else {
              System.out.printf("%nG[" + root + "][" + i + "] is not an edge%n");
          }

          onStack[root] = false;
        }

    }

并这样称呼它:

void DFS()
    {
        boolean[] visited =new boolean[N]; 
        int numComponets=0;

        // do the DFS from each node not already visited
        for (int i=0; i<N; ++i)
            if (!visited[i] && cycle == null)
            {
                ++numComponets;             
                DFS(i,visited);
            } 
    }

它成功地找到了连通分量,但不识别任何循环,只有当我删除 G[root][i] 条件时,这将是从 0 到 0 的第一个循环。我错过了什么?


你可以简单地维护一个集合S所有节点的。然后,您从该集合中取出一个节点,在该节点上运行 dfs/bfs,检查后边缘(如果是这样,您就知道有一个循环)。对于您访问的每个节点,从集合中删除该节点S。 dfs/bfs完成后,检查是否S是空的。如果是这样,那么您就知道不存在循环。否则,您将从中获取一个节点S,并在该节点上运行 dfs/bfs。运行时间应该是 O(n),其中 n 是节点数。

伪代码:

S = set(all nodes)
while len(S) > 0:
    node = S.pop()
    stack = [node]
    visited = set()
    while len(stack) > 0:
        node = stack.pop()
        visited.add(node)
        S.remove(node)
        for each neighbor of node in your graph:
            if neighbor in visited:
                # you know you have a cycle

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

检测未连接图中的循环 的相关文章

  • Guice 忽略注入构造函数参数上的 @Nullable

    我正在使用 Guice v 3 0 并且有一个值被注入到构造函数中 该值可以为 null 因此我在构造函数中使用 Nullable 来自 javax annotations 注释了该参数 public MyClass Parameter1
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • tomcat 7.0.50 java websocket 实现给出 404 错误

    我正在尝试使用 Java Websocket API 1 0 JSR 356 中指定的带注释端点在 tomcat 7 0 50 上实现 websocket 以下是我如何对其进行编码的简要步骤 1 使用 ServerEndpoint注解编写w
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 寻找局部最小值

    下面的代码正确地找到了数组的局部最大值 但未能找到局部最小值 我已经进行了网络搜索 以找到找到最小值的最佳方法 并且根据这些搜索 我认为我正在使用下面的正确方法 但是 在几天的时间里多次检查每一行之后 下面的代码中有一些我仍然没有看到的错误
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 无需登录即可直接从 Alfresco 访问文件/内容

    我的场景是这样的 我有一个使用 ALFRESCO CMS 来显示文件或图像的 Web 应用程序 我正在做的是在 Java servlet 中使用用户名和密码登录 alfresco 并且我可以获得该登录的票证 但我无法使用该票证直接从浏览器访
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • 替换文件中的字符串

    我正在寻找一种方法来替换文件中的字符串而不将整个文件读入内存 通常我会使用 Reader 和 Writer 即如下所示 public static void replace String oldstring String newstring
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • Watir Webdriver 计算 UL 列表中的项目数量

    我进行了一些搜索 但无法找到合适的答案 基本上我有一个长度不同的无序列表 我想遍历列表 做一些其他事情 然后返回并选择列表中的下一个项目 当我定义循环应该迭代的次数时 我可以很好地做到这一点 因为我知道列表中的项目数量 但是我不想为每个测试
  • python 3,尝试从多个 HID 输入读取,Raspberry Pi

    我有一个条形码扫描仪连接到我的 RasPi 没有任何 tty 这意味着没有显示器的无头 换句话说 数字输入的键盘记录器 该扫描仪可读取 GTIN 或 EAN 等数字条形码 它有效 脚本在启动时由 sh 启动 我使用的脚本如下所示 impor
  • 合并多个 BatchEncoding 或从 BatchEncoding 对象列表创建张量流数据集

    在标记标记任务中 我使用转换器标记生成器 它输出 BatchEncoding 类的对象 我分别对每个文本进行标记 因为我需要从文本中提取标签并在标记后重新排列它们 由于子标记 但是 我找不到一种方法可以从 BatchEncoding 对象列
  • 如何通知其他应用程序我的应用程序是 Windows 桌面的一部分?

    我想在 C 中为 Windows 创建一个 工具栏 并希望将其放置在 Windows 桌面的顶部空间 我希望其他 Windows 程序无法覆盖我的应用程序 我还希望其他应用程序将我的窗口视为桌面的一部分 以便当它们最大化时 您仍然可以看到我
  • Matlab调试:跳过下一行而不执行

    问题 问题的完整描述如下 有人对如何欺骗 Matlab 跳过一行或多行代码有建议吗 mex java 重写一些内部Matlab功能 有谁知道在哪里db 代码文件可能位于 如果存在 Matlab 中有几个函数可以在调试 运行程序时进行流量控制
  • 将所有提交导出到 ZIP 文件或目录中

    如何将所有提交导出到 ZIP 文件 包含全部文件 不仅仅是补丁 差异 myproject commit1 67d91ab zip myproject commit2 9283acd zip myproject commit3 c57daa6
  • 子集参数在 pandas.io.formats.style.Styler.format 中起什么作用?

    的公共文档pandas io formats style Styler format https pandas pydata org pandas docs stable reference api pandas io formats st
  • 实际上撤消 git stash pop

    这个问题 https stackoverflow com questions 20038056 undo git stash pop有相同的标题 但它是NOT同样的问题 这个问题实际上是在问 丢弃 git stash pop 的结果 这个问
  • 互联网是否需要身份验证才能实际连接才能下载?

    我的应用程序需要使用互联网连接从链接下载一些文件 我有一个使用代理并需要身份验证的互联网连接 不知何故 当我尝试连接到互联网时 它从不要求进行此身份验证 因此无法下载文件 我想问的是 有什么方法可以检测用户的互联网连接是否需要身份验证才能从
  • 如何启用枚举继承

    我正在编写一个库 其中有一组预定义的枚举值 比方说 我的枚举如下所示 public enum EnumClass FIRST first SECOND second THIRD third private String httpMethod
  • urlencode 形式的泽西乔达时间 ISO 8601 参数

    我正在使用 Jersey 1 17 1 并定义了接受 application x www form urlencoded 的 REST 服务 我想接受 ISO 8601 格式的参数 b 并让 Jersey 将其映射到 Joda DateTi
  • Iphone 中的多语言应用

    如何在应用程序中更改应用程序的默认语言 我正在尝试将应用程序语言更改为阿拉伯语 但我不知道如何完成此操作 有一种方法 首先创建一个不同的文件夹 命名为ar lproj并把localizable String 希望以下示例代码对您有所帮助 您
  • 如何删除字符串第一次出现之前和最后一次出现之后的所有行?

    猫抢 txt My Dashboard Fnfjfjf random test 00 50 1 01 56 My Notes No data found Change Language English Submit Estimation o
  • 为什么 @DisplayName 在 JUnit 5 中不能为我工作?

    出于某种原因 我真的很难让显示名称在带有 Kotlin 的 JUnit 5 中得到真正的尊重 这是我出于示例目的创建的测试文件 import org assertj core api Assertions import org junit
  • jQuery 添加一个类 - 我尝试过的所有方法都会在单击时删除该类

    我正在使用一个 3D 旋转按钮 其中每个面都有不同的短语 但两者都是指向同一 URL 的链接 我最初使用普通的旧 css hover 旋转立方体按钮 但我注意到当您单击该按钮时它会重置 仅当鼠标不再位于按钮上时 它才应旋转回起始位置 我创建
  • uiwebkit 错误 101

    我有一个搜索框 它接受希伯来语和英语的关键字 并在维基百科中搜索相应的关键字 如果我输入英语 它运行良好 但当我输入希伯来语时 它会显示此错误 当我输入希伯来语关键字 url 时看起来像 u05db u05db u05db u05db 当我
  • 在 WPF 中的数据绑定组合框中禁用分隔符选择

    我有一个数据绑定的组合框 在此列表中 我需要一个分隔符 由于这是数据绑定 我做了一些非常类似的事情这个帖子 http www japf fr 2008 12 how insert separator in a databound combo
  • tcl:如何使用变量的值创建新变量

    这是我正在尝试做的一个例子 set t SNS set t top commands that return value 想要获取存储在 t top 的信息 puts t top SNS top really want the data s
  • Django runserver 卡在执行系统检查上

    我正在运行 python manage py runserver 或 migrate 在这两个命令中 它都卡在执行系统检查上 您能帮我了解问题是什么以及如何解决它吗 Admins MacBook Pro driveu backend gat
  • 检测未连接图中的循环

    尽管关于这个主题有一些问题 但我需要一些更具体的建议 我正在开发一些项目 我必须重命名一个实体 这意味着保存一个包含实体的旧名称和新名称的新对象 这就是软件的工作原理 现在 我要做的是检查当有人尝试重命名对象时是否尝试循环依赖 例如 A g