通过指定root和leaves从图中获取树

时间:2014-05-07 08:35:01

标签: java jung jgrapht

我正在查看jgrapht和jung,但我似乎找不到任何方法让我做我喜欢的事。

我有一个图表,通过指定一个根节点和一些树叶,我想从中获取一棵树,或者如果不可能,至少会出错。

jgraphT和jung似乎都有alghoritms来从图中获得最小生成树,但是获得的树是随机的,没有人向我保证给定节点将是叶子而另一个将是中继...

1 个答案:

答案 0 :(得分:0)

如果你只用一片叶子来考虑这个问题,那么这就转到了这样一个问题:“是否有一个从根开始到最后一次访问每个其他节点的叶子的步行?”

这听起来很像“最长路径”问题......这是NP难的。 (而且我不认为添加更多叶子有帮助。:))

我可以想到启发式方法(以及证明特定图形的方法,或根/叶的选择,问题没有解决方案)但我怀疑通常你将不得不使用详尽的搜索方法,像这样:

  1. 从树叶中移除所有外出边缘。
  2. 如果你无法从根目录到达所有东西(BFS会在这里做),那就没有解决方案了。
  3. 开始从根遍历图表。
  4. 每一步:
    如果你还没有到达所有的叶子并且没有更多的边缘可以遍历,那么就没有解决方案了。 如果你已经到达了所有树叶并且所有节点都已被访问过,那么你已经完成了 否则,遍历尚未遍历的边缘。