一、题目
二、题解
dfs
dfs矩阵每一个位置,走过就标记为true, 如果矩阵中该位置的起点是0或者已经被遍历过就不在进行dfs
class Solution {
public:
int n, m;
vector<vector<char>> g;
bool check[310][310];
int dx[4] = {0, 0, -1, 1}, dy[4] = {-1, 1, 0, 0};
void dfs(int i, int j) {
if (g[i][j] == '0') return;
check[i][j] = true;
for (int k = 0; k < 4; k++)
if (i + dx[k] < n && i + dx[k] >= 0 && j + dy[k] < m && j + dy[k] >= 0 && !check[i + dx[k]][j + dy[k]])
dfs(i + dx[k], j + dy[k]);
}
int numIslands(vector<vector<char>>& grid) {
int cnt = 0;
g = grid, n = g.size(), m = g[0].size();
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (g[i][j] != '0' && !check[i][j]) {
dfs(i, j);
cnt++;
}
return cnt;
}
};