BFS over (node, mask)
Time O(2ⁿ × n²) Space O(2ⁿ × n)Start with all (i, 1 << i) at distance 0. BFS; moving to v sets mask | (1 << v). The first state with a full mask gives the answer.
import java.util.*;
class Solution {
public int shortestPathLength(int[][] graph) {
int n = graph.length, full = (1 << n) - 1;
boolean[][] seen = new boolean[n][1 << n];
Deque<int[]> q = new ArrayDeque<>();
for (int i = 0; i < n; i++) { q.offer(new int[]{i, 1 << i}); seen[i][1 << i] = true; }
for (int steps = 0; !q.isEmpty(); steps++) {
for (int size = q.size(); size > 0; size--) {
int[] s = q.poll();
if (s[1] == full) return steps;
for (int v : graph[s[0]]) {
int mask = s[1] | (1 << v);
if (!seen[v][mask]) { seen[v][mask] = true; q.offer(new int[]{v, mask}); }
}
}
}
return 0;
}
}Verdict: Unweighted, so BFS gives the shortest walk.