題目鏈接: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;
}
};