【发布时间】:2015-06-25 02:26:42
【问题描述】:
给定一个方形网格(无向图),有没有办法找到一条可以访问尽可能多顶点的路径。
每个顶点只能访问一次。这意味着该路径将是汉密尔顿之旅(如果存在),或者是最长的路径。
图表有一些墙。墙是一个没有边连接到邻居的顶点。
我有一个解决方案(在脑海中),但是查找所有路径并选择第一个访问的顶点最多的路径非常相似。
查找路径将访问从给定起始顶点到结束的所有邻居(没有办法走)。
回溯到当前路径直到起始顶点,如果有任何顶点在当前路径之外有邻居,过程类似 从找到的顶点及其新邻居开始第 1 步。
分析并选择最长的路径(顶点最多)。
找到similar problem,不明白@Juho是什么意思:
选择一个后继 si 到 top(S),并尝试找到一条路径 si−1⇝si 避开 F 中的顶点。如果找到了路径,则将路径 si−1⇝si 上的顶点插入到 F。
我没有足够的声望在那里添加评论。
我猜我的解决方案会遇到性能问题。有什么建议吗?
【问题讨论】:
-
我会试试depth-first search。
-
你能解释更多吗?
-
文章的哪一部分不清楚?进行深度优先搜索,避免自相交,当你到达死胡同时,记下路径的长度(即访问的节点数)。如果路径是迄今为止发现的最长路径,请将其记录下来。
-
嗯,DFS 仍然无法解决我的问题。 V,E 之间是否有任何条件表明该图没有汉密尔顿之旅?
标签: c++ graph graph-algorithm