We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent ab00093 commit d0e5285Copy full SHA for d0e5285
C++/shortest-path-visiting-all-nodes.cpp
@@ -0,0 +1,29 @@
1
+// Time: O(n * 2^n)
2
+// Space: O(n * 2^n)
3
+
4
+class Solution {
5
+public:
6
+ int shortestPathLength(vector<vector<int>>& graph) {
7
+ static const auto& INF = numeric_limits<int>::max();
8
+ vector<vector<int>> dp(1 << graph.size(),
9
+ vector<int>(graph.size(), INF));
10
+ queue<pair<int, int>> q;
11
+ for (int i = 0; i < graph.size(); ++i) {
12
+ dp[1 << i][i] = 0;
13
+ q.emplace(1 << i, i);
14
+ }
15
+ while (!q.empty()) {
16
+ int state, node;
17
+ tie(state, node) = q.front(); q.pop();
18
+ auto steps = dp[state][node];
19
+ for (const auto& nei : graph[node]) {
20
+ auto new_state = state | (1 << nei);
21
+ if (dp[new_state][nei] == INF) {
22
+ dp[new_state][nei] = steps + 1;
23
+ q.emplace(new_state, nei);
24
25
26
27
+ return *min_element(dp.back().cbegin(), dp.back().cend());
28
29
+};
0 commit comments