图表可以是循环的也可以是非循环的。目标是确定路径是否存在从任何节点到另一个节点,每个节点访问一次。
E.g。图
A <=> B
B <=> C
B <=> D
没有路径。无法构建包含每个节点的路径,其中每个节点仅访问一次。
我们可以假设每条边具有相同的长度,因为我们只是寻找路径的存在。我从最初的搜索中找不到任何好的算法,但我可能错过了它!
这只是我遇到的一个有趣的问题。如果需要更多信息,请告诉我!
答案 0 :(得分:1)
这是一个Hamiltonian path problem,没有办法轻易解决。这个问题属于NP-complete类,一般来说,这些问题需要指数量的时间和内存才能解决完全。但是有一些相当复杂的启发式算法。例如,“旅行商问题”是汉密尔顿路径问题的一个特例,你可以看一下解决问题的方法。
答案 1 :(得分:0)
我的解决方案是循环遍历图的每个顶点,然后从那里开始。然后递归地遍历每个相邻节点以查看是否可以从该子路径获得路径。但这个解决方案是我相信n ^ 2,所以我想知道是否有更好的解决方案。
伪代码:
def check_graph(graph)
{
foreach (vertex of graph)
{
if (is_path_possible(graph, vertex)
return true;
}
return false;
}
def is_path_possible(graph, source)
{
if !graph.nodes.contains(source)
return false;
if graph.nodes.count == 1
return true;
foreach (neighbor of source)
{
child_graph = graph - source;
is_child_path_possible = is_path_possible(child_graph, neighbor);
if (is_child_path_possible)
return true;
}
return false;
}