【问题标题】:Parsing an Input Regarding a Directed Graph解析有关有向图的输入
【发布时间】:2025-12-03 09:50:01
【问题描述】:

我正在处理一个稍微延迟的问题。我正在使用有向图并试图确定是否在某个输入内,是否存在到达那里的路线。现在我的问题是我必须在一个字符串中输入输入,但必须以提取重要信息的方式对其进行解析。例如:

你有一个问题实例,其中 G 是有向图,路径从 s 到 t(节点)

我的输入字符串是:(1,2,3,4,5),((1,2),(1,3),(2,3),(2,4),(3, 2),(3,5),(4,3),(5,2)),1,5

第一组括号代表节点,第二组代表图和路线的组成,其中数字 1 代表 s,5 代表 t(最后两个数字在末尾)。

我必须执行一个程序来确定路径是否存在。问题在于解析。我需要提取节点列表(第一个括号)、边列表(第二组)、起始节点(1)和结束节点(5)。

谁能提供一些关于如何解析这些并以我可以提取和打印出来的方式分解它们的见解?我无论如何都不是在寻找一个完整的书面工作程序,只是澄清一下,也许还有代码 sn-ps 来为我指明正确的方向。任何帮助将不胜感激。

【问题讨论】:

    标签: java parsing graph


    【解决方案1】:

    如果我们假设输入将严格遵循您提供的格式,那么这只是一个解析问题。这是获得三个大块(顶点、边和 st)的方法。

     String input=" (1,2,3,4,5),((1,2),(1,3),(2,3),(2,4),(3,2),(3,5),(4,3),(5,2)),1,5";
    
    String nodes=input.substring(0, input.indexOf("((")-1).trim();
    String edges=input.substring(input.indexOf("((")+1, input.indexOf("))")+1).trim();
    String st=input.substring(input.indexOf("))")+3).trim();
    

    然后您可以单独解析每个块并获取其值。有一件事:边列表足以定义图形(你真的不需要第一个块)。

    编辑: 您可以简单地初始化一个布尔数组visited[],其大小等于顶点数。最初,所有顶点都没有被访问。

    【讨论】:

    • 嘿@Xline 感谢您的回复!直到现在我才真正意识到修剪功能。不过,这确实帮助了我。我希望我能拿出第一个街区,然而,不幸的是,这是一个要求。
    • @jmart 很高兴它有帮助:)
    • 我还有一个问题。我将如何将每个节点标记为已访问并为此设置初始设计?我对有向图一点也不熟悉,它的输入真的很奇怪。有骨架吗?
    • 我明白你现在在说什么,谢谢。所以像 Boolean[]visited = new Boolean[n] 其中 n 是顶点数?不过,我现在主要关心的是实际上接受该输入并以这样一种方式使用它,即我可以将每个顶点分解成它自己的顶点。例如,给定我必须处理的输入,我将如何获取顶点 1->2 (1,2) 然后执行 1->3 (1,3) ?我只是坚持如何实际实施一个结构来处理这个问题。我就是想不出能起作用的东西。
    • 关于如何解决这个问题的任何想法?谢谢