You are viewing a single comment's thread. Return to all comments →
C++ solution. Being n the size of the board and k the number of obstacles, the complexity is O(n+k):
bool containObstacle (unordered_map<int, unordered_set<int>> &data, int row, int column){ return data.find(row) != data.end() && data[row].find(column) != data[row].end(); } int queensAttack(int n, int k, int r_q, int c_q, vector<vector<int>> obstacles) { // Insert obstacles unordered_map<int, unordered_set<int>> obstacle_positions; for (auto obstacle : obstacles) obstacle_positions[obstacle.front()].insert(obstacle.back()); int attackable_positions {0}; // Check left for (int i=c_q-1; i>0; i--) { if (!containObstacle(obstacle_positions, r_q, i)) attackable_positions++; else break; } // Check right for (int i=c_q+1; i<=n; i++) { if (!containObstacle(obstacle_positions, r_q, i)) attackable_positions++; else break; } // Check up for (int i=r_q-1; i>0; i--) { if (!containObstacle(obstacle_positions, i, c_q)) attackable_positions++; else break; } // Check down for (int i=r_q+1; i<=n; i++) { if (!containObstacle(obstacle_positions, i, c_q)) attackable_positions++; else break; } // Check up-left diagonal for (int i=r_q-1, j=c_q-1; i>0 && j>0; i--, j--) { if (!containObstacle(obstacle_positions, i, j)) attackable_positions++; else break; } // Check up-right diagonal for (int i=r_q-1, j=c_q+1; i>0 && j<=n; i--, j++) { if (!containObstacle(obstacle_positions, i, j)) attackable_positions++; else break; } // Check down-left diagonal for (int i=r_q+1, j=c_q-1; i<=n && j>0; i++, j--) { if (!containObstacle(obstacle_positions, i, j)) attackable_positions++; else break; } // Check down-right diagonal for (int i=r_q+1, j=c_q+1; i<=n && j<=n; i++, j++) { if (!containObstacle(obstacle_positions, i, j)) attackable_positions++; else break; } return attackable_positions; }
Seems like cookies are disabled on this browser, please enable them to open this website
Queen's Attack II
You are viewing a single comment's thread. Return to all comments →
C++ solution. Being n the size of the board and k the number of obstacles, the complexity is O(n+k):