LeetCode:51.岛屿数量
目录
1.岛屿数量
1.岛屿数量
这道题可以使用深度优先搜索,当我们遇到一个位置的时候就对其上下左右进行查询,如果是‘1’的话表示为陆地,就接着进行深度优先,同时我们需要用一个标记数组来表示这个位置是否走过了,不然会重复计算
那么如何表示上下左右移动,可以使用两个数组dx,dy来表示,dx[4] = {0, 0, 1, -1},dy[4]={1, -1, 0, 0},通过这两个数组就可以表示上下左右移动了
class Solution {int m, n;vector<vector<bool>> vis;
public:int numIslands(vector<vector<char>>& grid) {m = grid.size(), n = grid[0].size();vis = vector<vector<bool>>(m, vector<bool>(n));int ret = 0;for(int i = 0; i < m; i++)for(int j = 0; j < n; j++)if(vis[i][j] == false && grid[i][j] == '1'){ret++;dfs(grid, i, j);}return ret;}int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};void dfs(vector<vector<char>>& grid, int i, int j){grid[i][j] = true;for(int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if(x >= 0 && x < m && y >= 0 && y < n && vis[x][y] == false && grid[x][y] == '1')dfs(grid, x, y);}}
};