vector<vector<int>> dirs{ {-1, 0}, {1, 0}, {0, -1}, {0,1} };
void island_dfs(vector<vector<int>>& g, int xlen, int ylen, pair<int, int> start) {
int x = start.first;
int y = start.second;
g[x][y] = 0;
for (int d = 0; d < 4; d++) {
int ni = dirs[d][0] + x;
int nj = dirs[d][1] + y;
if (ni >= 0 && ni < xlen && nj >= 0 && nj < ylen && g[ni][nj])
island_dfs(g, xlen, ylen, pair<int, int>(ni, nj));
}
}
int islandSum(vector<vector<int>>& g) {
int count = 0;
int xlen = g.size();
int ylen = g[0].size();
for (int i = 0; i < xlen; i++) {
for (int j = 0; j < ylen; j++) {
if (g[i][j] == 1) {
island_dfs(g, xlen, ylen, pair<int, int>(i, j));
count++;
}
}
}
return count;
}