代码随想录算法训练营第五十七天| 图论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)))
相关推荐
shehuiyuelaiyuehao2 分钟前
算法54,链表 两数相加
数据结构·算法·链表
147API27 分钟前
如何设计“回答、追问、停答”三类蒸馏训练集
人工智能·算法·机器学习
朝朝辞暮i42 分钟前
C++ 第7课 while 循环
开发语言·c++·算法
blxr_1 小时前
力扣hot100爬楼梯https://leetcode.cn/problems/climbing-stairs/
算法·leetcode·职场和发展
pride.li1 小时前
ISP标定-NR标定(Noise Reduction,降噪校准)
算法·计算机视觉·isp
CQU_JIAKE2 小时前
9.29【A】
算法·深度优先
没落之王2 小时前
AI在文言文——论文脉复苏对AI的意义
大数据·人工智能·算法
u0111026753 小时前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
阿狗童鞋3 小时前
数据结构与算法实战指南
数据结构·算法
Navigator_Z3 小时前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode