您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页岛屿问题

岛屿问题

来源:测品娱乐

给一个01矩阵,求不同的岛屿的个数。

0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。

在矩阵:

[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
中有 3 个岛.

思路: 递归解决

package wangyiTest;

import java.awt.Checkbox;

public class DaoYu {

    /**
     * @param args
     */
    static boolean[][] visit;
    public static void main(String[] args) {
        boolean[][] grid={};
        System.out.println(numIslands(grid));
    }

    public static int numIslands(boolean[][] grid) {
        if(grid.length>0)
        {
            System.out.println();
            int count = 0;
            int row = grid.length;
            int column = grid[0].length;
            visit = new boolean[row][column];
            for(int i=0;i<row;i++)
            {
                for(int j=0;j<column;j++)
                {
                    //没有被访问
                    if(!visit[i][j])
                    {
                        if(grid[i][j])
                        {
                            visit[i][j]=true;
                            count ++;
                            //检查左右上下
                            Check(grid,i,j+1);
                            Check(grid, i,j-1);
                            Check(grid, i-1, j);
                            Check(grid,i+1,j);
                        }
                    }
                }
            }
            return count;
        }
        return 0;
    }
    public static void Check(boolean[][] grid, int i, int j){
        if(i>=0 && i<=grid.length-1 && j>=0 && j<=grid[0].length-1)
        {
            if(!visit[i][j] && grid[i][j])
            {
                visit[i][j]=true;
                Check(grid,i,j+1);
                Check(grid, i,j-1);
                Check(grid, i-1, j);
                Check(grid,i+1,j);
            }
        }
    }
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务