代码随想录算法训练营第五十七天| 图论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)))
相关推荐
Jerry3 分钟前
LeetCode 160. 相交链表
算法
Jerry25 分钟前
LeetCode 19. 删除链表的倒数第 N 个结点
算法
金銀銅鐵31 分钟前
费马小定理
python·数学·算法
技术不好的崎鸣同学2 小时前
[ACTF2020 新生赛]Exec 思路及解法
算法·安全·web安全
Full Stack Developme3 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
Jerry4 小时前
LeetCode 707. 设计链表
算法
C语言小火车5 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
kebidaixu5 小时前
两轮BMS AFE SH367306 I2C 读写时序
算法
智能排队系统_头部供应商5 小时前
RK3588边缘网关改造银行排队系统实战
算法