このアルゴリズムは、ハミルトニアン パス問題を解決します。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!) であると言えますか?