代码随想录算法训练营第51天|101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104.建造最大岛屿

文章目录

  • 101. 孤岛的总面积
  • 102. 沉没孤岛
  • 103. 水流问题
  • 104.建造最大岛屿

101. 孤岛的总面积

卡码网 101. 孤岛的总面积
代码随想录

from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y):area = 1que = deque([])que.append([x,y])flag = Falsewhile que:# 弹出一个点cur_x, cur_y = que.popleft()if cur_x == 0 or cur_x == len(matrix)-1 or cur_y ==0 or cur_y == len(matrix[0])-1:flag = True # 计算面积的同时判断是不是处理边界,如果是处于边界的话,就多返回一个true,只有不是边界的情况下才加到总面积上去。# 四个方向遍历(四个方向)for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Trueque.append([next_x, next_y])area += 1return flag, area
res = 0for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Trueflag, area = bfs(matrix, visited, i, j)if not flag:res += area# if bfs(matrix, visited, i, j)  == 1:#     res += 1
print(res)

102. 沉没孤岛

卡码网 102. 沉没孤岛
代码随想录

from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y):area = 1que = deque([])que.append([x,y])flag = Falseback_up = deque([])while que:# 弹出一个点cur_x, cur_y = que.popleft()# 把遍历的所有点就记录下来,如果确定是一个孤岛,把这些左边置为0back_up.append([cur_x, cur_y])if cur_x == 0 or cur_x == len(matrix)-1 or cur_y ==0 or cur_y == len(matrix[0])-1:flag = True# 四个方向遍历(四个方向)for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Trueque.append([next_x, next_y])area += 1if not flag:while back_up:cur_x, cur_y = back_up.popleft()matrix[cur_x][cur_y] = 0# return flag, area
res = 0for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Truebfs(matrix, visited, i, j)
# print(res)
for i in range(len(matrix)):# print(" ".jion(map(str, matrix[i])))print(" ".join([str(item) for item in matrix[i]]).strip())

103. 水流问题

卡码网 103. 水流问题
代码随想录

from collections import deque
n, m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))visited = [[False] * m for _ in range(n)]directions = [[1,0],[-1,0],[0,-1],[0,1]]first = set()
second = set()def dfs(matrix, visited, x, y, node):if visited[x][y]:returnnode.add((x,y))visited[x][y] = Truefor i, j in directions:next_x = x + inext_y = y + jif (0 <= next_x < len(matrix) and 0<= next_y < len(matrix[0]) and matrix[next_x][next_y] >= matrix[x][y]):dfs(matrix, visited, next_x, next_y, node)# 右/上
for i in range(len(matrix)):dfs(matrix, visited, i, 0, first)
for j in range(len(matrix[0])):dfs(matrix, visited, 0, j, first)
# print(first)# visited需要重新初始化
visited = [[False] * m for _ in range(n)]
for i in range(len(matrix)):dfs(matrix, visited, i, len(matrix[0])-1, second)
for j in range(len(matrix[0])):dfs(matrix, visited, len(matrix)-1, j, second)
# print(second)res = first & second
# print(res)for x,y in res:print(f'{x} {y}')

104.建造最大岛屿

卡码网 104.建造最大岛屿
代码随想录

from collections import deque
n,m = map(int, input().split())matrix = []for i in range(n):matrix.append(list(map(int, input().split())))
# 记录遍历
visited = [[False]*m for _ in range(n)]
# 记录岛屿编号
marked = [[0]*m for i in range(n)]directions = [[-1,0],[1,0],[0,-1],[0,1]]def bfs(matrix, visited, x, y, marked, isoland_cnt):area = 1que = deque([])que.append([x,y])# 记录新的岛屿marked[x][y] = isoland_cntwhile que:cur_x, cur_y = que.popleft()for i, j in directions:next_x = cur_x + inext_y = cur_y + jif next_x < 0 or next_x >= len(matrix) or next_y < 0 or next_y >= len(matrix[0]):continueif not visited[next_x][next_y] and matrix[next_x][next_y] == 1:visited[next_x][next_y] = Truemarked[next_x][next_y] = isoland_cntque.append([next_x, next_y])area += 1return areaisoland_cnt = 1
area_dict = dict()
for i in range(n):for j in range(m):if matrix[i][j] == 1 and not visited[i][j]:visited[i][j] = Truearea = bfs(matrix, visited, i, j, marked, isoland_cnt)area_dict[isoland_cnt] = areaisoland_cnt += 1res = 0
# 开始填充
for i in range(n):for j in range(m):if marked[i][j] == 0:max_area = 1isoland_set = set()for x,y in directions:next_x = x + inext_y = y + jif (0<= next_x < n and 0 <= next_y < m and marked[next_x][next_y] != 0 and marked[next_x][next_y] not in isoland_set):max_area += area_dict[marked[next_x][next_y]]isoland_set.add(marked[next_x][next_y])res = max(max_area, res)
if res == 0:print(n*m)
else:print(res)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树展开为链表

二叉树展开为链表 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

文件处理新纪元:微信小程序的‘快递员’与‘整理师’

嗨&#xff0c;我是中二青年阿佑&#xff0c;今天阿佑将带领大家如何通过巧妙的文件处理功能&#xff0c;让用户体验从‘杂乱无章’到‘井井有条’的转变&#xff01; 文章目录 微信小程序的文件处理文件上传&#xff1a;小程序的“快递服务”文件下载&#xff1a;小程序的“超…

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一)

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一) Sigrity PowerSI是频域电磁场仿真工具,以下图为例介绍如果用它观测电源的网络的S参数以及阻抗的频域曲线. 观测IC端电源网络的自阻抗 1. 用powerSi.exe打开该SPD文件

AWD入门

一、简介 AWD(Attack With Defense&#xff0c;攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同时你也要保护自己的主机不被别人…

强心剂!EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断

强心剂&#xff01;EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断 目录 强心剂&#xff01;EEMD-MPE-KPCA-LSTM、EEMD-MPE-LSTM、EEMD-PE-LSTM故障识别、诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 EEMD-MPE-KPCA-LSTM(集合经验模态分解-多尺…

【JAVA】第三张_Eclipse下载、安装、汉化

简介 Eclipse是一种流行的集成开发环境&#xff08;IDE&#xff09;&#xff0c;可用于开发各种编程语言&#xff0c;包括Java、C、Python等。它最初由IBM公司开发&#xff0c;后来被Eclipse Foundation接手并成为一个开源项目。 Eclipse提供了一个功能强大的开发平台&#x…

IDEA如何给debug断点加上筛选条件判断

前言 我们在使用IDEA开发Java应用时&#xff0c;经常是需要进行代码调试的&#xff0c;这就需要打断点进行操作。但有些时候&#xff0c;我们只希望在符合某种条件的情况下&#xff0c;才去到这个断点&#xff0c;不符合的情况下&#xff0c;直接跳过断点&#xff0c;这其实也…

【linux】线程 (三)

13. 常见锁概念 &#xff08;一&#xff09;了解死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源&#xff0c;但因互相申请被其他进程占有的&#xff0c;且不释放的资源&#xff0c;而处于的一种永久等待状态 &#xff08;二&#xff09;死锁四个必要条件 互斥条件…

RK3568平台开发系列讲解(调试篇)debugfs 文件系统

🚀返回专栏总目录 文章目录 一、debugfs使用案例二、enable debugfs三、debugfs API3.1、创建目录3.2、创建文件3.3、帮助函数四、使用示例📢Linux 上有一些典型的问题分析手段,从这些基本的分析方法入手,你可以一步步判断出问题根因。这些分析手段,可以简单地归纳为下图…

Linux·文件与IO

1. 回忆文件操作相关知识 我们首先回忆一下关于文件的一些知识。 如果一个文件没有内容&#xff0c;那它到底有没有再磁盘中存在&#xff1f;答案是存在&#xff0c;因为 文件 内容 属性&#xff0c;即使文件内容为空&#xff0c;但属性信息也是要记录的。就像进程的…

基于STM32的Android控制智能家政机器人

基于STM32的Android控制智能家政机器人 基于STM32的Android控制智能家政机器人一、项目背景与意义二、系统设计方案三、硬件电路设计四、软件设计与实现4.1 Android端软件设计4.2 机器人端软件设计 五、系统调试与测试六、结论与展望七、附录 基于STM32的Android控制智能家政机…

从外行人的角度解释1Bit的模型,是怎样改变世界的

一个框架&#xff0c;和一篇论文&#xff0c;改变了模型训练的规则 框架是BitNET 论文https://arxiv.org/abs/2410.16144 有人问我什么是1.58Bit 是这样的。 fp16是一般情况下模型训练后产物的精度。 比如qwen2 8B fp16&#xff0c;文件大小15GB 如果量化成Q_4O&#xff…

24下河南秋季教资认定保姆级教程

教师资格认定前需要做的准备材料 准备身份证户口本 居住证 学生证 教师考试合格证明 普通话证书 学历证书 体检合格证书 近期一寸白底证件照 网上报名 河南24下教资认定 网上报名时间&#xff1a;10月21日-11月1日 现场确认 网上审核未通过的宝子&#xff0c;需要…

html+css+js实现Notification 通知

实现效果&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Notif…

k8s use-context是什么

kubectl 的 use-context 命令用于在 Kubernetes 集群中切换上下文&#xff08;context&#xff09;&#xff0c;从而方便地在多个集群或命名空间之间进行操作。一个上下文定义了 kubectl 使用的 集群、用户 和 命名空间 的组合。 use-context 的作用&#xff1a; 每个上下文&…

AOP学习

corol调用serverce不在是直接调用的是调用底层代理对象&#xff0c;由代理对象统一帮我们处理 AOP常见概念 通知类型 切面顺序

【C++】— 一篇文章让你认识STL

文章目录 &#x1f335;1.什么是STL&#xff1f;&#x1f335;2.STL的版本&#x1f335;3.STL的六大组件&#x1f335;4.STL的重要性&#x1f335;5. 如何学习STL&#x1f335;6. 学习STL的三种境界 &#x1f335;1.什么是STL&#xff1f; STL是Standard Template Library的简称…

Matlab软件进行金融时间序列数据的描述性统计代码

1、数据S&P500的收盘价格&#xff0c;return100*log(pt/pt-1) 方法1&#xff1a;用python代码 import numpy as np import pandas as pddef calculate_log_returns(prices):"""计算价格序列的对数收益率。参数:prices (numpy.array): 价格序列。返回:log_…

【实战指南】Vue.js 介绍组件数据绑定路由构建高效前端应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

ChatGPT 现已登陆 Windows 平台

今天&#xff0c;OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示&#xff0c;该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户&#xff0c;是一个早期版本&#xff0c;将在今年晚些时候推出"完整体验"。…