#include<vector>
#include<utility>
#include <iostream>
using namespace std;
vector<pair<int, int>> dirs;
void dfs(vector<vector<char>>& grid, int i, int j) {
if(i < 0 || i >= grid.size() || j < 0 || j >=grid[0].size() || grid[i][j] == '0') return;
grid[i][j] = '0';
for(int i = 0; i < dirs.size(); i++) {
int ni = i + dirs[i].first;
int nj = j + dirs[i].second;
dfs(grid, ni, nj);
}
}
int numIslands(vector<vector<char>>& grid) {
int count(0);
dirs = {{0, 1} ,{0, -1}, {1, 0}, {-1, 0}};
for(int i = 0; i < grid.size(); i++) {
for(int j = 0; j < grid[0].size(); j++) {
if(grid[i][j] == '1') {
dfs(grid, i, j);
count++;
}
}
}
return count;
}
int main() {
vector<vector<char>> num = {{'1','1','0','0','0'},{'1','1','0','0','0'},{'0','0','1','0','0'},{'0','0','0','1','1'}};
cout << numIslands(num);
return 0;
}
I2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTx1dGlsaXR5PgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIHZlY3RvcjxwYWlyPGludCwgaW50Pj4gZGlyczsKICAgIAogICAgdm9pZCBkZnModmVjdG9yPHZlY3RvcjxjaGFyPj4mIGdyaWQsIGludCBpLCBpbnQgaikgewogICAgICAgIGlmKGkgPCAwIHx8IGkgPj0gZ3JpZC5zaXplKCkgfHwgaiA8IDAgfHwgaiA+PWdyaWRbMF0uc2l6ZSgpIHx8IGdyaWRbaV1bal0gPT0gJzAnKSByZXR1cm47CiAgICAgICAgZ3JpZFtpXVtqXSA9ICcwJzsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZGlycy5zaXplKCk7IGkrKykgewogICAgICAgICAgICBpbnQgbmkgPSBpICsgZGlyc1tpXS5maXJzdDsKICAgICAgICAgICAgaW50IG5qID0gaiArIGRpcnNbaV0uc2Vjb25kOwogICAgICAgICAgICBkZnMoZ3JpZCwgbmksIG5qKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGludCBudW1Jc2xhbmRzKHZlY3Rvcjx2ZWN0b3I8Y2hhcj4+JiBncmlkKSB7CiAgICAgICAgaW50IGNvdW50KDApOwogICAgICAgIGRpcnMgPSB7ezAsIDF9ICx7MCwgLTF9LCB7MSwgMH0sIHstMSwgMH19OwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBncmlkLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBncmlkWzBdLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICAgICBpZihncmlkW2ldW2pdID09ICcxJykgeyAKICAgICAgICAgICAgICAgICAgICBkZnMoZ3JpZCwgaSwgaik7IAogICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50OwogICAgfQoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8dmVjdG9yPGNoYXI+PiBudW0gPSB7eycxJywnMScsJzAnLCcwJywnMCd9LHsnMScsJzEnLCcwJywnMCcsJzAnfSx7JzAnLCcwJywnMScsJzAnLCcwJ30seycwJywnMCcsJzAnLCcxJywnMSd9fTsKCWNvdXQgPDwgbnVtSXNsYW5kcyhudW0pOwoJcmV0dXJuIDA7Cn0=