Java 通过指定根和叶从图形中获取树

Java 通过指定根和叶从图形中获取树,java,jung,jgrapht,Java,Jung,Jgrapht,我正在研究jgrapht和jung,但我似乎没有找到任何方法让我做我想做的事情 我有一个图,通过指定一个根节点和一些叶子,我想从中获得一棵树,或者至少是一个错误(如果不可能) 图中的JGORT和Jung似乎都有从图中获得最小生成树的算法,但是所得到的树是随机的,没有人保证一个给定的节点将是一个叶子,另一个将是一个中继……如果你只考虑一片叶子的问题,那么这就引出了一个问题:是否有一个从根开始,到叶子结束的行走,它至少访问其他节点一次 这听起来很像最长路径问题…是NP难的。我不认为增加更多的叶子会有

我正在研究jgrapht和jung,但我似乎没有找到任何方法让我做我想做的事情

我有一个图,通过指定一个根节点和一些叶子,我想从中获得一棵树,或者至少是一个错误(如果不可能)


图中的JGORT和Jung似乎都有从图中获得最小生成树的算法,但是所得到的树是随机的,没有人保证一个给定的节点将是一个叶子,另一个将是一个中继……

如果你只考虑一片叶子的问题,那么这就引出了一个问题:是否有一个从根开始,到叶子结束的行走,它至少访问其他节点一次

这听起来很像最长路径问题…是NP难的。我不认为增加更多的叶子会有帮助

我可以想出一些启发式的方法和方法来证明一个特定的图,或者根/叶的选择,这个问题没有解决方案,但我怀疑一般来说,你将不得不使用一种穷举搜索方法,比如:

从叶子上移除所有外边缘。 如果您无法从根目录访问所有内容,那么BFS将在此处执行,没有解决方案。 从根开始遍历图形。 在每个步骤中: 如果还没有到达所有的叶子,并且没有更多的边可以遍历,那么就没有解决方案。 如果你已经到达了所有的叶子,并且所有的节点都被访问了,那么你就完成了。 否则,请遍历尚未遍历的边。
你的问题不清楚。你是说你想让一个算法把一个图,一个节点列表和一个根作为输入,如果你能把这个图解释成一棵有根和叶子的树,那么就返回一棵树?或者它是该图的子图生成树,也就是说,你是否必须使用原始图的所有边?不,我不需要使用原始图的所有边…我有一个图,在这个图中,我指定哪个节点是我的根,哪个节点是我的叶,其余的节点是简单的中继。我想要一棵树,它能让我从根到每一片叶子。我不需要使用所有节点或边,重要的是根和所有叶都是最终树的一部分。如果存在未指定为最终树一部分的叶,或者必须指定所有叶,是否可以接受?如果您没有使用原始图的所有节点(假设您有一个包含多个连接组件的图,或者您的根有一个无法从根访问的父节点),那么这是否可以接受?通过这样做,您试图解决的总体问题是什么?您可以指定哪些节点是叶和根,未标记的节点可以用作中继或不用作ie。如果根和叶之间已经存在直接连接,则无需包括中间节点。我试图从一个网络中创建一棵树,它将是一个无向连通图,也就是说,得到一个没有循环的网络,其中每个叶节点都可以从根节点到达。我会将未使用的链接/节点保存在某个位置,以便在一个链接或节点掉落的情况下实现一些冗余。在这种情况下,如果可能的话,我会对剩余的节点重复alghoritm以获得新的树