如何访问无向图中的顶点

时间:2014-03-06 08:24:15

标签: algorithm graph iteration shortest-path

从任意位置访问无向图的所有顶点的适当算法是什么?例如,给定以下带有7个顶点的图形,从#6开始:

enter image description here

有许多可能的序列: 67645321, 676421235, 6453212467, ...

如何用最短路径(第一个)迭代顶点? 感谢。

2 个答案:

答案 0 :(得分:1)

跟进我上面的评论,

1-2-3
  | |
  4-5
  |
  6-7

按节点值排序,较小的值先行,结果为:

6-+-4-+-2-+-1
  `-7 `-5 `-3

横穿树:

6-4-2-1-2-3-2-4-5-4-6-7

可以进行更多优化,例如为每个节点保留每个“孩子”的“深度”或重量,首先横向浅孩子/轻孩子。

6-+-(5)-4-+-(3)-2-+-(1)-1
  `-(1)-7 `-(1)-5 `-(1)-3

因此我们横向如下:

6-7-6-4-5-4-2-1-2-3

可能有更多优化方法,祝你好运!

答案 1 :(得分:1)

  1. 找到离起始节点最远的节点,该节点将是起始节点的最短路径具有最大长度的节点。将此节点称为Q

  2. 计算从Q到图表中所有其他节点的距离。拨打此距离D1, D2, ...

  3. 开始在起始节点行走。

  4. 始终走到最近的未访问节点。

  5. 如果在同一距离内有多个未访问的节点,即如果有多个未访问的节点直接连接到当前节点,则步行到Di最大的节点。始终从Q 离开

  6. 根据您的示例图表,您会找到Q=1D1=0D2=1D3=2D4=2D5=3D6=3D7=4。从6开始,你有4个和7个作为选项,你选择7因为D7>D4。从那里你去4,因为那是最近的未访问节点。然后到5,因为D5>D2。最后3,2,1。

    这种算法并不完美,需要进行一些微调。例如,在步骤1中选择Q时,您可能最终得到节点3,因为它与6具有相同的距离,因此您需要一些额外的启发式来解决关系,可能有利于最少路径的节点走。所以你不会得到一个完美的结果,但我会说你会得到一些合理的东西。