Skip to content

Commit cd89d2a

Browse files
authored
Create shortest-path-to-get-food.cpp
1 parent 6bf09ad commit cd89d2a

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

C++/shortest-path-to-get-food.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Time: O(m * n)
2+
// Space: O(m + n)
3+
4+
class Solution {
5+
public:
6+
int getFood(vector<vector<char>>& grid) {
7+
static const vector<pair<int, int>> directions{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
8+
9+
vector<pair<int, int>> q;
10+
for (int r = 0; r < size(grid); ++r) {
11+
for (int c = 0; c < size(grid[0]); ++c) {
12+
if (grid[r][c] == '*') {
13+
q.emplace_back(r, c);
14+
break;
15+
}
16+
}
17+
}
18+
19+
int result = 0;
20+
while (!empty(q)) {
21+
++result;
22+
vector<pair<int, int>> new_q;
23+
for (const auto& [r, c] : q) {
24+
for (const auto& [dr, dc] : directions) {
25+
int nr = r + dr, nc = c + dc;
26+
if (!(0 <= nr && nr < size(grid) &&
27+
0 <= nc && nc < size(grid[0]) &&
28+
grid[nr][nc] != 'X')) {
29+
continue;
30+
}
31+
if (grid[nr][nc] == '#') {
32+
return result;
33+
}
34+
grid[nr][nc] = 'X';
35+
new_q.emplace_back(nr, nc);
36+
}
37+
}
38+
q = move(new_q);
39+
}
40+
return -1;
41+
}
42+
};

0 commit comments

Comments
 (0)