代码随想录算法训练营第五十七天| 图论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)))
相关推荐
疯狂打码的少年15 分钟前
【数据库技术】多值依赖与第四范式(4NF)
数据库·笔记·算法
子文雨22 分钟前
基于 uC3845 与 ATtiny13 双芯片架构的 8.4V/2.5Ah 锂电池智能充电器设计
单片机·嵌入式硬件·算法
青山木28 分钟前
Hot 100 --- 数组中的第K个最大元素
java·数据结构·算法·排序算法
玛卡巴卡ldf32 分钟前
【AICoding】笔试提示词设计思路
java·算法·ai编程
明月_清风43 分钟前
位图与布隆过滤器:海量数据下的"存在性判断"艺术
前端·后端·算法
Rnan-prince1 小时前
堆与TopK · 从零到通透 —— 9 节全系列复盘
python·算法
明月_清风1 小时前
Hash 表从入门到精通:Go 实战与工程细节
前端·后端·算法
nbsaas-boot1 小时前
多智能体系统的架构边界:任务编排、共享状态与故障隔离设计
人工智能·算法·动态规划
wuyk5552 小时前
12.归并排序:分治思想的稳定排序算法
开发语言·数据结构·算法·排序算法
吴声子夜歌2 小时前
ApacheCommons——commons-text(模板替换与文本算法)
java·开发语言·算法·apache