该算法解决了哈密顿路径问题。 G
是一个非定向图,v
起始顶点,
G.size()
图的大小,G.get(v).gV
当前顶点的所有邻居。
static private void dfs(HashMap<Integer, Virsune> G, int v) {
path.push(v);
// add v to the current path
onPath[v] = true;
if (path.size() == G.size()) {
System.out.println(path);
Integer[] tmp = new Integer[G.size()];
System.arraycopy(path.toArray(), 0, tmp, 0, path.size());
hamPaths.add(tmp);
}
for (int w : G.get(v).gV) {
if (!onPath[w]) {
dfs(G, w);
}
}
path.pop();
onPath[v] = false;
}
// main method
dfs(G,0);
我可以说这个算法的复杂性是O(n!)?
答案 0 :(得分:0)
这是算法枚举图的所有路径。
如果您要枚举图表中的所有路径,这应该会为您提供运行时的提示。在完整的图表中,确实有n!路径,所以这是一个下限。我会留给你说,如果它也是一个上限。
FWIW - 问题可在O(2 ^ n)
中解决