このアルゴリズムは、ハミルトニアン経路の問題を解決します。 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!)だと言うことはできますか?
それはO(n!)になるだろう私たちは、各ノードで何度も見ていますか? – ControlAltDel