岛屿问题

FE07EEE1F0268775C646E844B05BFF2D.png

public class Solution {
//用来保存结果
    public int[][] res;
//用来计算1的个数
    public int sum = 0;

//写到结果中
    void writeRes(int[][] res){
        for(int i=0;i<res.length;i++){
            for(int j=0;j<res[i].length;j++){
                if(res[i][j]==1)
                    res[i][j] = sum;
            }
        }
    }
//深度优先
    void dfs(int[][] m,int i,int j){
        if(i<0 || i>=m.length || j<0 || j>=m[0].length)
            return;

        if(m[i][j] == 0)
            return;

        sum++;
//如果为1 就把它变成0,直到把所有的岛屿都给沉没掉
        m[i][j] = 0;
        res[i][j] = 1;
        dfs(m,i+1,j);
        dfs(m,i,j+1);
        dfs(m,i,j-1);

    }

    public int[][] solute(int[][] m){
        res = new int[m.length][m[0].length];
        for(int i=0;i<m.length;i++){
            for(int j=0;j<m[i].length;j++){
                sum=0;
                dfs(m,i,j);
                if(sum > 0)
                    writeRes(res);
            }
        }


        for(int i=0;i<m.length;i++){
            for(int j=0;j<m[i].length;j++){
                System.out.print(res[i][j] + " ");
            }
            System.out.print('\n');
        }
        return res;

    }

    public static void main(String[] args) {
        int[][] m = {
                {0,0,1,1},
                {1,1,1,1},
                {0,0,1,0}
        };
        new Solution().solute(m);

    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容