@@ -53,43 +53,45 @@ class Solution2 {
5353public:
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