在有向图中仅访问所有节点一次

时间:2017-01-08 10:50:13

标签: c++ path directed-graph

我有一个有向图,我想找到一个只访问每个节点一次的路径。我想以很好的复杂性做到这一点。这可能吗?如果是的话,怎么样?

1 个答案:

答案 0 :(得分:2)

您正在搜索Hamiltonian path,这是一个简单的开放路径,每个节点只包含一次。

在给定图表中查找哈密顿路径为NP-complete。实际上,确定给定(有向或无向)图是否包含哈密顿路径已经是NP完全的(通过例如vertex cover problem的减少来证明)。

如果您仍想对其进行编码,则此处为an implementation on github。如果你想要一个快速的解决方案,也许一个启发式就足够了(例如inspired by DNA molecules,或者一个在图形子集上运行速度很快的解决方案。例如,如果你有一个DAG,你可以进行拓扑排序然后检查连续的顶点是否连接。如果是,拓扑排序给出哈密顿路径。