题解 | #岛屿数量#

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

总结:
1.根据题意可知,每找到一个连通分量就是一个岛屿。所以可以使用循环访问所有的点,每找到一个未被访问且值为1的点就是一个连通分量,岛屿数就加1.找到一个岛屿后就使用深度优先搜索把岛上所有的点遍历一遍,标记为已访问。

import java.util.*;


public class Solution {
    /**
     * 判断岛屿数量
     * @param grid char字符型二维数组 
     * @return int整型
     */
    boolean[][] visited;
    public int solve (char[][] grid) {
        // write code here
        int rowNum = grid.length;
        int colNum = grid[0].length;
        visited = new boolean[rowNum][colNum];
        int num = 0;//岛屿数量
        for(int i=0;i<rowNum;i++)
            for(int j=0;j<colNum;j++){
                if((!visited[i][j])&&grid[i][j]=='1'){
                    dfs(grid,i,j,rowNum,colNum);
                    num++;
                }
            }
        return num;
    }
    public void dfs(char[][] grid,int i,int j,int rowNum,int colNum){
            visited[i][j]=true;
            if(j-1>=0 && grid[i][j-1]=='1'&&(!visited[i][j-1]))
                dfs(grid,i,j-1,rowNum,colNum);//向左找
            if(j+1<colNum && grid[i][j+1]=='1'&&(!visited[i][j+1]))
                dfs(grid,i,j+1,rowNum,colNum);//向右找
            if(i-1>=0 && grid[i-1][j]=='1'&&(!visited[i-1][j]))
                dfs(grid,i-1,j,rowNum,colNum);//向下找
            if(i+1<rowNum && grid[i+1][j]=='1'&&(!visited[i+1][j]))
                dfs(grid,i+1,j,rowNum,colNum);//向下找

    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
头像
11-09 12:17
清华大学 C++
out11Man:小丑罢了,不用理会
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务