#include<iostream> #include<vector> usingnamespace std; int dir[4][4] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; classSolution { boolisValid(int m, int n, int x, int y){ if (x < 0 || y < 0 || x >= m || y >= n) { returnfalse; } returntrue; } voiddfs(int m, int n, int x, int y, vector< vector<char> >& grid){ visited[x][y] = 1; for (auto sdir : dir) { int tmpx = x + sdir[0]; int tmpy = y + sdir[1]; if (isValid(m, n, tmpx, tmpy) && !visited[tmpx][tmpy] && grid[tmpx][tmpy] == '1') { dfs(m, n, x + sdir[0], y + sdir[1], grid); } } }
public: int ans; vector< vector<int> > visited; intnumIslands(vector< vector<char> >& grid){ int m = grid.size(); int n = grid[0].size(); visited.resize(m); for (int i = 0; i < m; i++) { visited[i].resize(n, 0); } for (int i = 0; i < m; i ++) { for (int j = 0; j < n; j++) { if (grid[i][j] == '1' && !visited[i][j]) { ans += 1; dfs(m, n, i, j, grid); } } } return ans; } };