题目链接:click~
/*题意:给出一个二维0和1的矩阵,判断有多少全是1的封闭区域*/
/**
*思路:遍历矩阵,遇到1时,以该点为起始点,向四周做深度优先遍历,遇到
* 1是,标记为已访问的状态
*
*/
class Solution {
private:
int n,m;
public:
void DFS(vector<vector<char>> &grid, vector<int> &dx, vector<int> &dy, int x, int y) {
for(int i = 0; i < 4; i ++) { //四个方向
int nx = x + dx[i];
int ny = y + dy[i];
if(0 <= nx && nx < n && 0 <= ny && ny < m && grid[nx][ny] == '1') {
grid[nx][ny] = '0';
DFS(grid, dx, dy, nx, ny);
}
}
}
int numIslands(vector<vector<char>> &grid) {
n = grid.size();
if(n == 0) return 0;
m = grid[0].size();
vector<int> dx = {-1, 1, 0, 0};
vector<int> dy = {0, 0, 1, -1};
int ans = 0;
for(int i = 0; i < n; i ++) {
for(int j = 0; j < m; j ++) {
if(grid[i][j] == '1') {
grid[i][j] = '0';
ans ++;
DFS(grid, dx, dy, i, j);
}
}
}
return ans;
}
};