Backtracking

boolean hamiltonian(int u, boolean[] visited, int count) {
  if (count == n) return true;
  visited[u] = true;
  for (int v : graph[u]) if (!visited[v]) if (hamiltonian(v, visited, count + 1)) return true;
  visited[u] = false;
  return false;
}
Advertisement

Bitmask DP for TSP

dp[mask][v] = shortest path visiting nodes in mask ending at v. Transitions from dp[mask - v][u] + dist(u, v). O(2^N × N²).

Advertisement

Practical N

Backtracking works for N ≤ ~20 with good pruning. Bitmask DP: N ≤ ~22 in memory.

Special graphs

Bipartite: use Konig-Egerváry. Sparse cubic: Robertson–Sanders–Seymour–Thomas. Various special-case polys.