day51 第十一章:图论part02

news/2025/2/15 14:25:26/

99. 岛屿数量 深搜

每一块的上下左右都遍历过了之后,这块陆地就遍历完了。是深搜,不是广搜

深搜:递归

def dfs():

        if .....:

                终止条件

        dfs(子节点)

directions = [[0,1],[1,0],[0,-1],[-1,0]]def dfs(grid, visited, x, y):if grid[x][y] == 0 or visited[x][y]:returnvisited[x][y] = Truefor i in range(4):next_x = x + directions[i][0]next_y = y + directions[i][1]if next_x < 0 or next_x >=n or next_y < 0 or next_y >= m:continuedfs(grid, visited, next_x, next_y)if __name__ == '__main__':n, m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]res = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:res += 1 dfs(grid, visited, i, j)print(res)

99. 岛屿数量 广搜

广搜用队列(deque),

先加进去第一个节点

while que:

        cur = que.popleft()

        for cur_child in cur_children:

                que.append(cur_child)

        

from collections import deque
directions = [[0,1],[1,0],[0,-1],[-1,0]]def bfs(grid, visited, x, y):que = deque([])que.append([x,y])visited[x][y] = Truewhile que:cur_x, cur_y = que.popleft()for i in range(4):next_x = cur_x + directions[i][0]next_y = cur_y + directions[i][1]if next_x < 0 or next_x >=n or next_y < 0 or next_y >= m:continueelif grid[next_x][next_y] == 1 and not visited[next_x][next_y]:que.append([next_x, next_y])visited[next_x][next_y] = Trueif __name__ == '__main__':n, m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]res = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:res += 1 bfs(grid, visited, i, j)print(res)

100. 岛屿的最大面积

dfs

# dfs,bfs都行
# dfs
directions = [[0,1],[1,0],[0,-1],[-1,0]]
max_area = 0
area = 0def dfs(grid, visited, x, y):global areaglobal max_areaif grid[x][y] == 0 or visited[x][y] == True:returnvisited[x][y] = Truearea += 1max_area = max(max_area, area)# print("area=", area)# print("max_area=", max_area)for i in range(4):next_x = x + directions[i][0]next_y = y + directions[i][1]if next_x < 0 or next_x >= n or next_y < 0 or next_y >= m:continuedfs(grid, visited, next_x, next_y)if __name__ == "__main__":n,m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))# n,m = 4, 5# grid = [[1,1,0,0,0],[1,1,0,0,0],[0,1,1,0,0],[0,0,0,1,1]]visited = [[False]*m for _ in range(n)]for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:area = 0dfs(grid, visited, i, j)print(max_area)

bfs

# dfs,bfs都行
# bfs
from collections import deque
directions = [[0,1],[1,0],[0,-1],[-1,0]]def bfs(grid, visited, x, y):area = 0que = deque()que.append([x,y])while que:cur_x, cur_y = que.popleft()if grid[cur_x][cur_y] == 1 and not visited[cur_x][cur_y]:area += 1visited[cur_x][cur_y] = Truefor i in range(4):next_x = cur_x + directions[i][0]next_y = cur_y + directions[i][1]if next_x < 0 or next_x >= n or next_y < 0 or next_y >=m:continue# if grid[next_x][next_y] == 1 and not visited[next_x][next_y]:que.append([next_x, next_y])return areaif __name__ == "__main__":n,m = map(int, input().split())grid = []for _ in range(n):grid.append(list(map(int, input().split())))visited = [[False]*m for _ in range(n)]max_area = 0for i in range(n):for j in range(m):if grid[i][j] == 1 and not visited[i][j]:# area = 0# global max_areamax_area = max(max_area, bfs(grid, visited, i, j))print(max_area)


http://www.ppmy.cn/news/1572260.html

相关文章

微流控专题 | 单细胞封装背景

为了从单细胞实验中获得有意义的生物数据&#xff0c;需要对大量单个细胞进行分析。这可以通过使用基于压力驱动流控的液滴微流控技术来实现。 本应用说明中描述的微流体平台用于生成皮升大小的微液滴&#xff0c;以单细胞水平封装 HeLa 细胞以供进一步分析。此过程称为单细胞封…

kkFileView二开之pdf转图片接口

kkFileView二开之Pdf转图片接口 1 kkFileView源码下载及编译2 Pdf转图片接口2.1 背景2.2 分析2.2 接口开发2.2.1 编写Pdf转图片方法2.2.2 编写转换接口 2.3 接口测试2.3.1 Pdf文件准备2.3.2 pdf2Image 3 部署 1 kkFileView源码下载及编译 前文 【kkFileView二开之源码编译及部…

Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题

Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题 背景 在使用 Dify 框架进行开发时&#xff0c;遇到了两个主要的技术挑战&#xff1a; 代码节点连接到 PGSQL&#xff08;PostgreSQL&#xff09;数据库。解决沙盒环境中由于系统调用限制导致的“oper…

左移架构 -- 从攒批,湖仓到使用数据流的实时数据产品

编辑导读: 这篇文章翻译自 Kai Waehner的 《The Shift Left Architecture – From Batch and Lakehouse to Real-Time Data Products with Data Streaming》。文章通过数据产品的概念引出了如何创建可重复使用的数据产品使企业能够从当前和未来的数据中获得价值。基于构建数据产…

Hyperledger Fabric 入门笔记(十八)Fabric V2.5 测试网络部署补充 - 排序节点管理

文章目录 一、准备工作二、手动为通道加入排序节点2.1. 生成加密材料与启动容器2.1.1. 为新增排序节点生成加密材料2.1.2. 启动新增的排序节点 2.2. 加入排序节点2.2.1. 获取最新的配置区块2.2.2. 将新增的排序节点加入到通道中 2.3. 通道配置更新2.3.1. 将通道配置转换为JSON格…

IoTDB 集群重启某节点失败

问题现象 IoTDB 1.3.3.6 版本部署的 3C3D 集群&#xff0c;在重启某个节点服务时失败&#xff0c;报错信息为节点冲突&#xff0c;日志部分截图如下&#xff1a; 问题原因 当前 IoTDB 会根据 data/confignode/system 路径下的 confignode-system.properties 文件及 data/data…

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA

【EXCEL】【VBA】处理GI Log获得Surf格式的CONTOUR DATA data source1: BH coordination tabledata source2:BH layer tableprocess 1:Collect BH List To Layer Tableprocess 2:match Reduced Level from "Layer"+"BH"data source1: BH coordination…

Nginx location 和 proxy_pass 配置详解

概述 Nginx 配置中 location 和 proxy_pass 指令的不同组合方式及其对请求转发路径的影响。 配置效果 1. location 和 proxy_pass 都带斜杠 / location /api/ {proxy_pass http://127.0.0.1:8080/; }访问地址&#xff1a;www.hw.com/api/upload转发地址&#xff1a;http://…