牛客题霸 [ 岛屿数量] C++题解/答案
题目描述
给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。
题解:
人傻了,调了半小时没调出来。。
难倒是不难
其实就是dfs然后标记附近的岛屿,如果附近所有岛屿都被标记了,就count++
然后看还有其他的岛屿,挺常规的
代码:
class Solution {
private:int d[5]={-1,0,1,0,-1};
public:/*** 判断岛屿数量* @param grid char字符型vector<vector<>> * @return int整型*/void dfs(int x, int y, vector<vector<char> >& grid, vector<vector<bool>> &vis, int row, int col){if(x<0||x>=row||y<0||y>=col||vis[x][y]==false) return;if(grid[x][y]=='1'){vis[x][y] = false;for(int i=0;i<4;i++){dfs(x+d[i],y+d[i+1],grid,vis,row,col);}}}int solve(vector<vector<char> >& grid) {// write code hereif(grid.size()==0){return 0;}int row = grid.size();int col = grid[0].size();int count = 0;vector<vector<bool>> vis(row,vector<bool>(col,true));for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(grid[i][j]=='1'&&vis[i][j]==true){dfs(i,j,grid,vis,row,col);count++;}}}return count;}
};