从任意位置访问无向图的所有顶点的适当算法是什么?例如,给定以下带有7个顶点的图形,从#6开始:
有许多可能的序列: 67645321, 676421235, 6453212467, ...
如何用最短路径(第一个)迭代顶点? 感谢。
答案 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)
找到离起始节点最远的节点,该节点将是起始节点的最短路径具有最大长度的节点。将此节点称为Q
。
计算从Q
到图表中所有其他节点的距离。拨打此距离D1, D2, ...
。
开始在起始节点行走。
始终走到最近的未访问节点。
如果在同一距离内有多个未访问的节点,即如果有多个未访问的节点直接连接到当前节点,则步行到Di
最大的节点。始终从Q
离开。
根据您的示例图表,您会找到Q=1
和D1=0
,D2=1
,D3=2
,D4=2
,D5=3
,D6=3
,D7=4
。从6开始,你有4个和7个作为选项,你选择7因为D7>D4
。从那里你去4,因为那是最近的未访问节点。然后到5,因为D5>D2
。最后3,2,1。
这种算法并不完美,需要进行一些微调。例如,在步骤1中选择Q
时,您可能最终得到节点3,因为它与6具有相同的距离,因此您需要一些额外的启发式来解决关系,可能有利于最少路径的节点走。所以你不会得到一个完美的结果,但我会说你会得到一些合理的东西。