首页 > 其他分享 >岛屿数量(深度优先遍历)

岛屿数量(深度优先遍历)

时间:2024-10-17 13:49:34浏览次数:3  
标签:count 优先 遍历 int 岛屿 vis grid && array

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [
  ["1","1","1","1","0"],
  ["1","1","0","1","0"],
  ["1","1","0","0","0"],
  ["0","0","0","0","0"]
]
输出:1

示例 2:

输入:grid = [
  ["1","1","0","0","0"],
  ["1","1","0","0","0"],
  ["0","0","1","0","0"],
  ["0","0","0","1","1"]
]
输出:3

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0' 或 '1'
  • class Solution {
        int m, n, count = 0;
        ;
        boolean[][] vis;
        int []dx = {0, 0, 1, -1};
        int[] dy = {1, -1, 0, 0};
    
        public int numIslands(char[][] array) {
            m = array.length;
            n = array[0].length;
            vis = new boolean[m][n];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (array[i][j] == '1' && !vis[i][j]) {
                        dfs(array, i, j);
                        count++;
                    }
                }
            }
            return count;
        }
        private void dfs(char [][]array,int i,int j){
            vis[i][j]=true;//标记陆地
            for(int k=0;k<4;k++){
                int x=i+dx[k],y=j+dy[k];
                if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y]){
                    if(array[x][y]=='1')dfs(array,x,y);
                }
            }
        }
    }

标签:count,优先,遍历,int,岛屿,vis,grid,&&,array
From: https://blog.csdn.net/weixin_54783024/article/details/142949062

相关文章

  • python中怎么遍历字典
    遍历字典:keys() 、values()、items()1、xxx.keys():返回字典的所有的key,返回一个序列,序列中保存有字典的所有的键。效果图:代码:# keys() 该方法会返回字典的所有的key#   该方法会返回一个序列,序列中保存有字典的所有的键d = {'name':'孙悟空','age':1......
  • C语言手撕实战代码_线索二叉树_先序中序线索二叉树_树的先根遍历_后根遍历_树的度_孩
    文章目录1.设计算法构造一棵先序线索二叉树2.先序线索二叉树的先序遍历算法3.设计算法构造一棵中序线索二叉树4.遍历中序线索二叉树5.树的先根遍历和后根遍历6.树T的叶子结点个数7.计算一棵以孩子兄弟表示的树T的度,该算法的时间复杂度为O(n)8.计算树孩子兄弟链表表示的T......
  • Java遍历Map集合的方法
    Java中遍历  Map 集合的常用方式主要有以下几种:1.使用 keySet()方法遍历 遍历Map的key集合,然后通过key获取value。Map<String,Integer>map=newHashMap<>();map.put("one",1);map.put("two",2);map.put("three",3);for(Stringkey......
  • 【优先级评估】模糊小波神经网络攻击目标优先级评估【含Matlab源码 7329期】
    ......
  • 代码随想录算法训练营day16| 513.找树左下角的值 112.路径总和 106.从中序和后序
    学习资料:https://programmercarl.com/0513.找树左下角的值.html#算法公开课递归、回溯返回值:True/False,root构建二叉树TrueNode(root_value)513.找树左下角的值(实例变量self.result,self.maxdepth;找到叶子节点,若深度>self.maxdepth,则更新最大深度;只考虑左和右子树,用递归+......
  • 【Linux】Linux进程状态与进程优先级
    1.前置知识1.1.并行与并发并发:表示CPU在同⼀个时间内执⾏多个任务并⾏:表示多个CPU在同⼀个时间内执⾏各⾃的任务示意图如下:1.2.时间片时间⽚(timeslice),⼜称为“量⼦(quantum)”或“处理器⽚(processorslice)”,是分时操作系统分配给每个正在运⾏的进程微观上的⼀段CPU时间(在......
  • Collection集合的遍历
    一、第一种方法,将集合转换成数组,进行循环遍历publicclassCollectionDemo3{publicstaticvoidmain(String[]args){Collectionc1=newArrayList();c1.add("java");c1.add("python");c1.add("list");c1.a......
  • Ribbon-Loadbalancer自定义负载均衡策略:本地优先+偏向服务器优先
    Ribbon核心顶层抽象packagecom.netflix.loadbalancer;publicinterfaceIRule{Serverchoose(Objectvar1);voidsetLoadBalancer(ILoadBalancervar1);ILoadBalancergetLoadBalancer();}继承IRule实现choose方法默认实现我们这里说明现有的集......
  • java实现 已知一颗树的层序遍历和中序遍历 输出树的先序遍历和后序遍历
    给定树的节点数,在给出这棵树的层序遍历和中序遍历输出这棵树的先序遍历和后序遍历输入735426712536471输出35246712561743importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Scanner;classN......
  • Bison遇到冲突的默认行为&用户自定义优先级
    Bison遇到冲突的默认行为&用户自定义优先级在使用Bison进行语法分析时,如果在语法规则中存在冲突,Bison会根据默认的优先级和结合性规则进行决策,选择某个特定的行为来解决冲突。Bison中常见的冲突主要包括两类:移入-规约冲突(shift-reduceconflict)规约-规约冲突(reduce-reduce......