• lintcode:Number of Islands 岛屿的个数


    题目:

    给一个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 个岛.

    解题:

    programcreek看到是根据深度优先算法

    对某个位置(i,j)

    当是1 的时候,是岛屿,该位置设为 0 ,并将四周的 1 设置为 0,这样就是递归思想了

    当是0的时候,不是岛屿,寻找下一个位置

    Java程序:

    public class Solution {
        /**
         * @param grid a boolean 2D matrix
         * @return an integer
         */
        public int numIslands(boolean[][] grid) {
            // Write your code here
            int m = grid.length;
            if(m==0)
                return 0;
            int count = 0;
            int n = grid[0].length;
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(grid[i][j]==true){
                        dfs(grid,i,j);
                        count++;
                    }
                }
            }
            return count;
        }
        private void dfs(boolean[][]grid,int i,int j){
            if(i<0 || j<0||i>=grid.length || j>=grid[0].length)
                return ;
            if(grid[i][j]==true){
                grid[i][j]= false;
                dfs(grid,i-1,j);
                dfs(grid,i+1,j);
                dfs(grid,i,j-1);
                dfs(grid,i,j+1);
            }
            
        }
    }
    View Code

    总耗时: 9193 ms

    Python程序:

    class Solution:
        # @param {boolean[][]} grid a boolean 2D matrix
        # @return {int} an integer
        def numIslands(self, grid):
            # Write your code here
            m = len(grid)
            if m==0:
                return 0
            n = len(grid[0])
            if  n==0:
                return 0
            count = 0
            for i in range(m):
                for j in range(n):
                    if grid[i][j]==True:
                        self.dfs(grid,i,j)
                        count +=1
            return count
        
        def dfs(self,grid,i,j):
            if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]):
                return
            if grid[i][j]==True:
                grid[i][j]=False
                self.dfs(grid,i-1,j)
                self.dfs(grid,i+1,j)
                self.dfs(grid,i,j-1)
                self.dfs(grid,i,j+1)
    View Code

    总耗时: 433 ms

  • 相关阅读:
    CPU,MPU,MCU,SOC,SOPC联系与差别
    call && jmp 指令
    认识OD的两种断点
    VB逆向
    ASProtect.SKE.2.11 stolen code解密
    破解之寻找OEP[手动脱壳](2)
    破解之寻找OEP[手动脱壳](1)
    破解常用断点设置
    VB断点大全
    API断点大全
  • 原文地址:https://www.cnblogs.com/theskulls/p/4875599.html
Copyright © 2020-2023  润新知