Skip to content

Commit 202828b

Browse files
authored
Update minimum-time-takes-to-reach-destination-without-drowning.cpp
1 parent 64a85f6 commit 202828b

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

C++/minimum-time-takes-to-reach-destination-without-drowning.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,43 +53,45 @@ class Solution2 {
5353
public:
5454
int minimumSeconds(vector<vector<string>>& land) {
5555
static const vector<pair<int, int>> DIRECTIONS {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
56-
vector<vector<int>> lookup(size(land), vector<int>(size(land[0])));
56+
vector<vector<int>> lookup1(size(land), vector<int>(size(land[0]), -1));
57+
vector<vector<int>> lookup2(size(land), vector<int>(size(land[0]), -1));
5758
vector<pair<int, int>> q1;
58-
vector<tuple<int, int, int>> q2;
59+
vector<pair<int, int>> q2;
5960
for (int i = 0; i < size(land); ++i) {
6061
for (int j = 0; j < size(land[0]); ++j) {
6162
if (land[i][j] == "*") {
6263
q1.emplace_back(i, j);
63-
lookup[i][j] = -1;
64+
lookup2[i][j] = 0;
6465
} else if (land[i][j] == "S") {
65-
q2.emplace_back(i, j, 0);
66+
q2.emplace_back(i, j);
67+
lookup2[i][j] = 0;
6668
}
6769
}
6870
}
6971
while (!empty(q1) || !empty(q2)) {
7072
vector<pair<int, int>> new_q1;
71-
vector<tuple<int, int, int>> new_q2;
73+
vector<pair<int, int>> new_q2;
7274
for (const auto& [i, j] : q1) {
7375
for (const auto& [di, dj] : DIRECTIONS) {
7476
const int ni = i + di, nj = j + dj;
75-
if (!(0 <= ni && ni < size(land) && 0 <= nj && nj < size(land[0]) && land[ni][nj] != "X" && land[ni][nj] != "D" && lookup[ni][nj] != -1)) {
77+
if (!(0 <= ni && ni < size(land) && 0 <= nj && nj < size(land[0]) && land[ni][nj] != "X" && land[ni][nj] != "D" && lookup1[ni][nj] == -1)) {
7678
continue;
7779
}
78-
lookup[ni][nj] = -1;
80+
lookup1[ni][nj] = 0;
7981
new_q1.emplace_back(ni, nj);
8082
}
8183
}
82-
for (const auto& [i, j, d] : q2) {
84+
for (const auto& [i, j] : q2) {
8385
if (land[i][j] == "D") {
84-
return d;
86+
return lookup2[i][j];
8587
}
8688
for (const auto& [di, dj] : DIRECTIONS) {
8789
const int ni = i + di, nj = j + dj;
88-
if (!(0 <= ni && ni < size(land) && 0 <= nj && nj < size(land[0]) && land[ni][nj] != "X" && lookup[ni][nj] == 0)) {
90+
if (!(0 <= ni && ni < size(land) && 0 <= nj && nj < size(land[0]) && land[ni][nj] != "X" && lookup2[ni][nj] == -1 && lookup1[ni][nj] == -1)) {
8991
continue;
9092
}
91-
lookup[ni][nj] = 1;
92-
new_q2.emplace_back(ni, nj, d + 1);
93+
lookup2[ni][nj] = lookup2[i][j] + 1;
94+
new_q2.emplace_back(ni, nj);
9395
}
9496
}
9597
q1 = move(new_q1);

0 commit comments

Comments
 (0)