如何订购图形节点,使两个相邻节点之间的距离最小

时间:2014-01-11 11:26:55

标签: java c++ algorithm graph

我想知道这个问题在图论中是否已​​知: 我有一个没有权重G =(V,A)的无向图,我想把这个图的节点放在一个字符串中,以便定向节点尽可能地靠近放置。例如:

鉴于此图:

a,b;a,d;b,e;c,f;c,h;f,h;e,g;e,h.

其中弧由';'分隔

我需要达到这个解决方案: A,B,d,E,G,H,C,F = 2 其中2是两个有向节点之间字符串a,b,d,e,g,h,c,f的最大距离。

形式上:

  • 让d(v,u)为根据图表的两个节点之间的距离。
  • 查找订单v 1,,v 2,,v n,,这样max {d(v i ,,v i + 1,)}是最小的

1 个答案:

答案 0 :(得分:1)

好吧,似乎您正面临Hamiltonian Path Problem 的变体。

在这个问题中,给定一个图表 - 您正在寻找一条遍历所有顶点而不重复任何节点两次的路径。

请注意,哈密尔顿路径是解决问题的完美方法,因此如果您的问题能够得到有效解决,那么哈密顿路径问题也是如此。

不幸的是,哈密顿路径问题没有已知的多项式解,问题是NP-Complete(因此普遍认为这种(有效的)解决方案不存在)。

蛮力解决方案将是O(n!) - 检查所有可能的排列,并选择最佳排列。这可以使用branch and bound techniques进行优化。