给定一个方格(无向图),有没有办法找到一个尽可能多地访问顶点的路径。
每个顶点只能访问一次。这意味着如果存在,路径将是汉密尔顿之旅,或者是最长的路径。
图表有一些墙。 Wall是一个没有边缘连接到邻居的顶点。
我有一个解决方案(记住),但它非常类似于查找所有路径并选择第一个访问了大多数顶点。
查找路径将从给定的起始顶点到结尾访问所有邻居(无法继续)。
回顾当前路径直到起始顶点,如果有任何顶点在当前路径之外有邻居,那么过程就像 步骤1来自找到的顶点及其新邻居。
- 醇>
分析并选择最长路径(具有最多顶点)。
我发现similar problem,无法理解@Juho是什么意思:
选择后到顶部(S),并尝试找到路径si-1⇝si,避开F中的顶点。如果找到路径,则将路径si-1⇝si上的顶点插入到F. / p>
我没有足够的声誉在那里添加评论。
我猜,我的解决方案会遇到性能问题。有什么建议吗?答案 0 :(得分:0)
这更像哈密尔顿路径问题。它是NP完全的,因此您需要进行详尽的搜索。得到你的蛮力。我只能建议可以使用线程来缓解您的性能问题;在可用线程中均匀地划分起始顶点。如果您找到汉密尔顿路径,则终止,否则最长路径获胜。
算法本身只需找到所有可能的路径。我可能有一种启发式方法可以停止使用似乎会产生不良结果的路径,但这意味着解决方案可能并不总是正确的。