【问题标题】:how to find a path visit as much as possible vertices?如何找到尽可能多的路径访问顶点?
【发布时间】:2015-06-25 02:26:42
【问题描述】:

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

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

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

我有一个解决方案(在脑海中),但是查找所有路径并选择第一个访问的顶点最多的路径非常相似。

  1. 查找路径将访问从给定起始顶点到结束的所有邻居(没有办法走)。

  2. 回溯到当前路径直到起始顶点,如果有任何顶点在当前路径之外有邻居,过程类似 从找到的顶点及其新邻居开始第 1 步。

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

找到similar problem,不明白@Juho是什么意思:

选择一个后继 si 到 top(S),并尝试找到一条路径 si−1⇝si 避开 F 中的顶点。如果找到了路径,则将路径 si−1⇝si 上的顶点插入到 F。

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

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

【问题讨论】:

  • 我会试试depth-first search
  • 你能解释更多吗?
  • 文章的哪一部分不清楚?进行深度优先搜索,避免自相交,当你到达死胡同时,记下路径的长度(即访问的节点数)。如果路径是迄今为止发现的最长路径,请将其记录下来。
  • 嗯,DFS 仍然无法解决我的问题。 V,E 之间是否有任何条件表明该图没有汉密尔顿之旅?

标签: c++ graph graph-algorithm


【解决方案1】:

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

算法本身只需要找到所有可能的路径。我可能有一种启发式方法,可以停止为似乎得到不好结果的路径烦恼,但这意味着解决方案可能并不总是正确的。

【讨论】:

    猜你喜欢
    • 2021-05-25
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多