代码随想录算法训练营第五十七天| 图论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)))
相关推荐
燃于AC之乐42 分钟前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E7 小时前
【二分法】寻找峰值
算法
mit6.8247 小时前
位运算|拆分贪心
算法
ghie90907 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9987 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx8 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd8 小时前
C++引用:高效编程的别名利器
算法