原题链接:岛屿数量
个人解法
思路:
这道题是经典的dfs或者bfs暴搜题,直接对岛屿进行暴搜标记已经访问,那么主函数就看有几个没被访问的岛屿。
时间复杂度: O ( n m ) O(nm) O(nm)
代码:
class Solution {
public:
int st[310][310];
vector<int> dx = {-1, 0, 1, 0};
vector<int> dy = {0, 1, 0, -1};
int res = 0;
void dfs(vector<vector<char>>& grid, int x, int y) {
st[x][y] = true;
int n = grid.size(), m = grid[0].size();
for(int i = 0;i < 4;i ++) {
int tx = x + dx[i], ty = y + dy[i];
if(tx < 0 || tx >= n || ty < 0 || ty >= m) continue;
if(grid[tx][ty] == '0' || st[tx][ty]) continue;
dfs(grid, tx, ty);
}
}
int numIslands(vector<vector<char>>& grid) {
int n = grid.size(), m = grid[0].size();
for(int i = 0;i < n;i ++) {
for(int j = 0;j < m;j ++) {
if(grid[i][j] == '1' && !st[i][j] ) {
res ++;
dfs(grid, i, j);
}
}
}
return res;
}
};