如何找到路径访问尽可能多的顶点

how to find a path visit as much as possible vertices?

本文关键字:顶点 尽可能 访问 何找 路径      更新时间:2023-10-16

给定一个正方形网格(无向图),有没有任何方法可以找到一条访问尽可能多顶点的路径。

每个顶点只能访问一次。这意味着这条路如果存在的话,将是汉密尔顿之旅,或者是最长的一条路。

这张图有一些墙。墙是一个没有边连接到邻居的顶点。

我有一个解决方案(在脑海中),但它非常类似于找到所有路径并选择访问了最多顶点的第一条路径。

  1. 找到一条路径将访问从给定起点顶点到终点的所有邻居(没有路可以走)。

  2. 回顾当前路径,直到起始顶点,如果有任何顶点在当前路径之外有邻居,处理如下从所找到的顶点及其新邻居开始执行步骤1。

  3. 分析并选择最长路径(具有最多顶点)。

我发现了类似的问题,无法理解@Juho的意思:

选择一个后继si到顶部(S),并尝试找到一条路径si−1⇝si避免F中的顶点。如果找到路径,请插入路径si−1上的顶点⇝si至F.

我没有足够的声誉在那里添加评论。

我想我的解决方案会遇到性能问题。有什么建议吗?

这更像是一个哈密顿路径问题。它是NP完全的,所以你需要做一个详尽的搜索。我只能建议使用线程来缓解性能问题;在可用线程中平均分配起始顶点。如果你找到一条哈密顿路径,则终止,否则最长的路径获胜。

算法本身只需要找到所有可能的路径。我可能有一种启发式方法来停止对一条似乎会得到坏结果的路径的困扰,但这意味着解决方案可能并不总是正确的。