Skip to content

Commit d0e5285

Browse files
authored
Create shortest-path-visiting-all-nodes.cpp
1 parent ab00093 commit d0e5285

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
+29
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)