代码随想录算法训练营第五十七天| 图论03

101. 孤岛的总面积

基础题目 可以自己尝试做一做 。
代码随想录

把处于边界上的岛屿全部消除,剩下的就是孤岛

python 复制代码
direction=[[0,1],[0,-1],[1,0],[-1,0]]
count=0
def dfs(grid,x,y):
    global count
    grid[x][y]=0
    count+=1
    for i,j in direction:
        next_x=x+i
        next_y=y+j
        if next_x<0 or next_x>=len(grid) or next_y<0 or next_y>=len(grid[0]):
            continue
        if grid[next_x][next_y]==1:
            dfs(grid,next_x,next_y)

if __name__=='__main__':
    n,m=map(int,input().split())
    grid=[]
    for i in range(n):
        grid.append(list(map(int,input().split())))
    for i in range(n):
        if grid[i][0]==1:
            dfs(grid,i,0)
        if grid[i][m-1]==1:
            dfs(grid,i,m-1)
    for j in range(m):
        if grid[0][j]==1:
            dfs(grid,0,j)
        if grid[n-1][j]==1:
            dfs(grid,n-1,j)
    count=0
    for i in range(n):
        for j in range(m):
            if grid[i][j]==1:
                dfs(grid,i,j)
    print(count)

102. 沉没孤岛

和上一题差不多,尝试自己做做
代码随想录

在上一题的基础上修改

python 复制代码
direction=[[0,1],[0,-1],[1,0],[-1,0]]
flag=False

def dfs(grid,x,y):
    global flag
    if flag==False:
        grid[x][y]=2
    else:
        grid[x][y]=0
    for i,j in direction:
        next_x=x+i
        next_y=y+j
        if next_x<0 or next_x>=len(grid) or next_y<0 or next_y>=len(grid[0]):
            continue
        if grid[next_x][next_y]==1:
            dfs(grid,next_x,next_y)

if __name__=='__main__':
    n,m=map(int,input().split())
    grid=[]
    for i in range(n):
        grid.append(list(map(int,input().split())))
    for i in range(n):
        if grid[i][0]==1:
            flag=False
            dfs(grid,i,0)
        if grid[i][m-1]==1:
            flag=False
            dfs(grid,i,m-1)
    for j in range(m):
        if grid[0][j]==1:
            flag=False
            dfs(grid,0,j)
        if grid[n-1][j]==1:
            flag=False
            dfs(grid,n-1,j)
    for i in range(n):
        for j in range(m):
            if grid[i][j]==1:
                flag=True
                dfs(grid,i,j)
    for i in range(n):
        for j in range(m):
            if grid[i][j]==2:
                grid[i][j]=1
    for row in grid:
        print(' '.join(map(str, row)))
相关推荐
元Y亨H6 分钟前
开发者必须掌握的十大核心算法
算法
元Y亨H10 分钟前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H23 分钟前
数据结构与算法的通俗指南
数据结构·算法
2301_7644413338 分钟前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模
林泽毅40 分钟前
PyTRIO快速入门(二):Datum构建
人工智能·算法·产品
keep intensify1 小时前
最长有效括号
算法·leetcode·动态规划
CoderYanger1 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
猫头虎1 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作
长不胖的路人甲2 小时前
什么是赫夫曼树(哈夫曼树 / Huffman Tree)
python·算法·霍夫曼树
Warren2Lynch3 小时前
掌握 UML 构造型、标记定义与标记值:面向领域特定建模的 UML 扩展全面指南
大数据·算法·uml