首页 > 其他分享 >岛屿的周长

岛屿的周长

时间:2024-04-12 10:35:03浏览次数:23  
标签:陆地 周长 格子 岛屿 网格 搜索

1.岛屿的周长
题意:有一个row x col的二维网格地图,其中网格值是1代表陆地,0代表海域,网格外也是海域,网格中的格子只水平相连或者竖直相连,现在网格地图里面恰好有一个岛屿,有一个或多个陆地格子所连接成的岛屿。
岛屿内部没有湖(湖是指水域在岛屿内部,且不和岛屿周围的水相连),网格的边长为1,计算这个岛屿的周长。

方法:DFS

思路:
由于岛屿是几个陆地格子水平相连,或者竖直相连的,并且该题中说明只有一个岛屿,所以使用DFS对第一个陆地格子的四周(上下左右)进行遍历,对于搜索到的陆地格子,继续对其四周进行遍历,如果搜索到的不是岛屿或者网格位置超出范围了,则返回,这样就可以搜索到岛屿。

为了避免搜索的时候出现死循环,对于已经搜索过的陆地格子进行标记。

岛屿的周长是陆地格子与非陆地格子相邻的边长和(包括水域和边界),所以每次从陆地格子搜索到非陆地格子,周长加1。

代码:

点击查看代码
class Solution:
    def islandPerimeter(self, grid: List[List[int]]) -> int:
        def dfs(grid,r,c):
            ###此时已经到地图之外
            if not(r>=0 and r<len(grid) and c>=0 and c<len(grid[0])):
                return 1
            ###此时该网格是水域
            if grid[r][c]==0:
                return 1
            ###该陆地网格已经被搜索过了
            if grid[r][c]==2:
                return 0
            ###该网格是陆地,并且没有被搜索
            ###避免死循环,对遍历过的岛屿进行标记
            grid[r][c]=2

            return dfs(grid,r-1,c)+dfs(grid,r+1,c)+dfs(grid,r,c-1)+dfs(grid,r,c+1)
        
        for i in range(0,len(grid)):
            for j in range(0,len(grid[0])):
                ###找到第一个陆地格子
                if grid[i][j]==1:
                    ###由于只有一个岛屿,直接返回
                    return dfs(grid,i,j)

标签:陆地,周长,格子,岛屿,网格,搜索
From: https://www.cnblogs.com/busakura/p/18130640

相关文章

  • 代码随想录 | 图论 797. 所有可能的路径(dfs) ,200. 岛屿数量 (dfs)200. 岛屿数量 (bfs)
    797.所有可能的路径https://leetcode.cn/problems/all-paths-from-source-to-target/description/List<List<Integer>>res;List<Integer>path;publicList<List<Integer>>allPathsSourceTarget(int[][]graph){res=newA......
  • lanqiao OJ 3513 岛屿个数(2023省赛)
    原题链接:3.岛屿个数-蓝桥云课(lanqiao.cn)感觉这个题出的真的特别好,考察了对bfs的使用,包括连通性的一系列判断,如果对bfs掌握的不熟练真的很难想出如何下手来做这道题。这里我们需要用海水来进行bfs,海水可以渗透,也就是说可以走8个方向,因为我们要从任意一个边界点出发,所以我......
  • C语言经典例题(7) --- 计算三角形的周长和面积、球体的体积、变种水仙花数、时间转换
    文章目录1.计算三角形的周长和面积2.计算球体的体积3.变种水仙花数4.时间转换5.输出学生信息1.计算三角形的周长和面积题目描述:根据给出的三角形3条边a,b,c(0<a,b,c<100,000),计算三角形的周长和面积。输入描述:一行,三角形3条边(能构成三角形),中间用一个空......
  • 200. 岛屿数量(中)
    目录题目题解:DFS题目给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[["1","1","1","1","0"],["1"......
  • C语言例4-1:计算半径为1.5的圆的周长和面积并输出
    代码如下://计算半径为1.5的圆的周长和面积并输出#include<stdio.h>#definePI3.1415926intmain(void){ floatradius,length,area; radius=1.5; length=2*PI*radius;//计算圆的周长 area=PI*radius*radius;//计算圆的面积 printf("radiu......
  • 【力扣】岛屿数量(体会一下dfs和bfs思路的实质)
    题目描述注意,需要求的是岛屿的数量,而不是岛屿的总面积,这道题很考验对dfs思路的理解,而不是简单地套用模版。可以用dfs和bfs两种方法做。深度优先搜索版本首先看代码:classSolution{private:intdir[4][2]={0,1,1,0,-1,0,0,-1};//四个方向voiddfs(ve......
  • 200. 岛屿数量c
    intvisit[300][300];voiddfs(char**grid,intm,intn,inti,intj){if(i>=m||j>=n)return;visit[i][j]=1;if(i+1<m&&grid[i+1][j]=='1'&&visit[i+1][j]==0){dfs(grid,m,n,i+1,j);}if(j......
  • 三角形面积和周长
    ‘’’写—段程序,让用户输入三角形的三条边长,如果三条边长不能构成三角形,则提示用户重新输入如果可以构成三角形,则计算周长和面积对于用户的输入,首先要约定格式,这里简单的约定为每个边长之间用空格间隔在获得用户的输入以后,要对输入进行检查,有两点需要检查(1)检查是不......
  • java练习1(求圆的周长与面积)
    packagecom.shujia.zuoye;importjava.util.Scanner;/*输入圆形半径,求圆形的周长和圆形的面积,并将结果输出。/publicclass求圆的面积{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入圆的半径:");doubler=s......
  • 【教3妹学编程-算法题】收集足够苹果的最小花园周长
    3妹:“在小小的花园里面挖呀挖呀挖,种小小的种子开小小的花”2哥 :3妹也会唱这首儿歌呀,这首儿歌在五一期间很火啊。3妹:是呀,小朋友们都喜欢唱,我这个200多个月的大朋友也喜欢唱,哈哈2哥 :甜美的歌声加上黄老师甜美的外表,很治愈!3妹:“在特别大的花园里面挖呀挖呀挖,种特别大的种子开......