Skip to content

Commit b07d068

Browse files
authored
Create Shortest Path Visiting All Nodes.java
1 parent c21dafb commit b07d068

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
public int shortestPathLength(int[][] graph) {
3+
int n = graph.length;
4+
Map<Integer, Set<Set<Integer>>> map = new HashMap<>();
5+
Queue<State> queue = new LinkedList<>();
6+
for (int i = 0; i < n; i++) {
7+
Set<Integer> visited = new HashSet<>();
8+
visited.add(i);
9+
map.put(i, new HashSet<>(List.of(visited)));
10+
queue.add(new State(i, 0, visited));
11+
}
12+
while (!queue.isEmpty()) {
13+
State removed = queue.remove();
14+
int node = removed.node();
15+
int steps = removed.steps();
16+
Set<Integer> visited = removed.visited();
17+
if (visited.size() == n) {
18+
return steps;
19+
}
20+
for (int conn : graph[node]) {
21+
Set<Integer> connVisited = new HashSet<>(visited);
22+
connVisited.add(conn);
23+
if (!map.get(conn).contains(connVisited)) {
24+
queue.add(new State(conn, steps + 1, connVisited));
25+
map.computeIfAbsent(conn, k -> new HashSet<>()).add(connVisited);
26+
}
27+
}
28+
}
29+
return -1;
30+
}
31+
32+
private static record State(int node, int steps, Set<Integer> visited) {}
33+
}

0 commit comments

Comments
 (0)