#include "soln.hpp" int Solution::numIslands(vector> &grid) { // queue> current_island{pair{0,0}}; int islands = 0; for (int i = 0; i < grid.size(); i++) { for (int j = 0; j < grid[0].size(); j++) { // found land if (grid[i][j] == '1') { islands++; grid[i][j] = '0'; queue> adjs; adjs.push({i, j}); while (!adjs.empty()) { pair adj = adjs.front(); adjs.pop(); if (adj.first + 1 < grid.size() && grid[adj.first + 1][adj.second] == '1') { grid[adj.first + 1][adj.second] = '0'; adjs.push({adj.first + 1, adj.second}); } if (adj.first > 0 && grid[adj.first - 1][adj.second] == '1') { grid[adj.first - 1][adj.second] = '0'; adjs.push({adj.first - 1, adj.second}); } if (adj.second + 1 < grid[0].size() && grid[adj.first][adj.second + 1] == '1') { grid[adj.first][adj.second + 1] = '0'; adjs.push({adj.first, adj.second + 1}); } if (adj.second > 0 && grid[adj.first][adj.second - 1] == '1') { grid[adj.first][adj.second - 1] = '0'; adjs.push({adj.first, adj.second - 1}); } } } } } return islands; } bool Solution::test(vector> &grid, int answer) { return numIslands(grid) == answer; }