当前位置: 首页 > news >正文

【代码随想录算法训练营——Day51】图论——99.计数孤岛、100.最大岛屿的面积

卡码网题目链接
https://kamacoder.com/problempage.php?pid=1171
https://kamacoder.com/problempage.php?pid=1172

题解
99.计数孤岛
只要遇到一个1,就使用深搜或广搜,把所有相邻为1的位置都标记为已访问。深搜,怎么样把上下左右四个点都遍历递归?用一个循环来写,把递归放到循环里,遍历4次。把result的控制放在dfs外面,不放在dfs里面。我写成了在main中直接调用dfs,其实不对。

100.最大岛屿的面积
这一题还用深搜可以解决,每次到一个岛屿时递归计算遇到1时总加上面积数目,等这一轮遍历完后比较最大结果的大小。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
bfs的写法要记住。

代码

#99.计数孤岛
#dfs法
point = [1, 0, 0, 1, -1, 0, 0, -1]
result  = 0
def dfs(i, j, visited, graph):for x, y in zip(point[::2], point[1::2]):nextx = i + xnexty = j + yif nextx < 0 or nextx >= len(graph) or nexty < 0 or nexty >= len(graph[0]):continueif graph[nextx][nexty] == 1 and visited[nextx][nexty] == False:visited[nextx][nexty] = Truedfs(nextx, nexty, visited, graph)if __name__ == "__main__":n, m = map(int, input().split())graph = []for i in range(n):row = list(map(int, input().split()))graph.append(row)visited = [[False] * m for _ in range(n)]for i in range(n):for j in range(m):if graph[i][j] == 1 and visited[i][j] == False:result += 1visited[i][j] = Truedfs(i, j, visited, graph)print(result)
#100.最大岛屿的面积
#dfs法
point = [[1, 0], [-1, 0], [0, 1], [0, -1]]
count = 0
def dfs(i, j, visited, graph):global countfor x in range(len(point)):nextx = i + point[x][0]nexty = j + point[x][1]if nextx < 0 or nextx >= len(graph) or nexty < 0 or nexty >= len(graph[0]):continueif graph[nextx][nexty] == 1 and visited[nextx][nexty] == False:count += 1visited[nextx][nexty] = Truedfs(nextx, nexty, visited, graph)
if __name__ == "__main__":n, m = map(int, input().split())graph = []for i in range(n):row = list(map(int, input().split()))graph.append(row)visited = [[False] * m for _ in range(n)]ans = 0for i in range(n):for j in range(m):if graph[i][j] == 1 and visited[i][j] == False:count = 1visited[i][j] = Truedfs(i, j, visited, graph)ans = max(ans, count)print(ans)#bfs法
from collections import deque
point = [[1, 0], [-1, 0], [0, 1], [0, -1]]
count = 0
def bfs(i, j, visited, graph):global countqueue = deque()queue.append(i)queue.append(j)while queue:x = queue.popleft()y = queue.popleft()for t in range(len(point)):nextx = x + point[t][0]nexty = y + point[t][1]if nextx < 0 or nextx >= len(graph) or nexty < 0 or nexty >= len(graph[0]):continueif graph[nextx][nexty] == 1 and visited[nextx][nexty] == False:count += 1visited[nextx][nexty] = Truequeue.append(nextx)queue.append(nexty)if __name__ == "__main__":n, m = map(int, input().split())graph = []for i in range(n):row = list(map(int, input().split()))graph.append(row)visited = [[False] * m for _ in range(n)]ans = 0for i in range(n):for j in range(m):if graph[i][j] == 1 and visited[i][j] == False:count = 1visited[i][j] = Truebfs(i, j, visited, graph)ans = max(ans, count)print(ans)
http://www.dtcms.com/a/539913.html

相关文章:

  • d44:Sentinel 微服务流量控制与 Seata 分布式事务
  • Nacos注册中心:从服务注册到负载均衡
  • 归并排序和计数排序详解(非比较排序)
  • Nginx‌如何配置负载均衡,并使用对不同同负载均衡算法进行配置
  • 网站管理平台扩展插件广告人网站
  • HarmonyOS视频编解码与转码深度探索:从原理到分布式实践
  • 无人机数字资产采集技术架构与实践:从多维度感知到云端化建模的实现路径
  • 无人机螺旋桨运行技术解析
  • 自己编辑网站怎么做的毕节做网站的公司
  • 【Linux】Linux下基本指令:man echo cp mv move less date grep zip tar 指令以及指令的本质
  • Nand flash和norflash对比
  • EXCEL(带图)转html【uni版】
  • 什么是Spring?
  • 网站建设 招标资质要求网站开发和ipv6
  • 专题:2025中国汽车行业Data+AI数智化转型与全球化白皮书|附340+份报告PDF、数据仪表盘汇总下载
  • 基于金仓KFS工具,破解多数据并存,浙人医改造实战医疗信创
  • 自主访问控制模型
  • Trilium非线性笔记测评:本地知识库+远程协作,构建你的第二大脑!
  • 网站颜色背景代码建设咨询网站
  • ⸢ 拾-Ⅰ⸥⤳ 威胁感知与响应建设方案:感知覆盖威胁识别
  • Sui 中的 epoch 和 检查点(checkpoint)
  • 【仿RabbitMQ的发布订阅式消息队列】--- 概念理解
  • 图书销售系统数据库设计方案
  • SpringBoot+MybatisPlus+自定义注解+切面实现水平数据隔离功能(附代码下载)
  • Linux小课堂: JavaWeb 应用环境配置与 Tomcat 安装指南
  • Linux小课堂: Tomcat容器中部署Jenkins的完整流程与关键技术要点
  • 本地部署消息中间件 RabbitMQ 并实现外网访问 (Linux 版本)
  • Kafka在Spring Boot生态中的浅析与应用
  • 南京网站建设与维护英文购物网站模板下载
  • Linux网络编程:进程间关系和守护进程