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

代码随想录算法训练营第五十一天|99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积

99.岛屿数量 深搜

99. 计数孤岛

代码随想录

思路:这道题也可以算是深搜的模板题了,不过已经很久没做深搜了,还是讲讲退出dfs的两种处理方法。一种是没有明显的return,另一种是有。有的情况就是先判断节点是否合法,一定要是合法的节点才会进行后续的运算。没有return其实也没啥区别,只是不会有一个明显的退出环节

direction=[[0,1],[0,-1],[1,0],[-1,0]]def main():n,m=map(int,input().split())graph=[]for i in range(n):graph.append(list(map(int,input().split())))visit=[[False]*m for _ in range(n)]result=0for i in range(n):for j in range(m):if graph[i][j]==1 and not visit[i][j]:result+=1visit[i][j]=Truedfs(graph,visit,i,j)print(result)def dfs(graph,visit,x,y):for i,j in direction:next_x=x+inext_y=y+jif next_x<0 or next_x>=len(graph):continueif next_y<0 or next_y>=len(graph[0]):continueif not visit[next_x][next_y] and graph[next_x][next_y]==1:visit[next_x][next_y]=Truedfs(graph,visit,next_x,next_y)if __name__=="__main__":main()
direction=[[0,1],[0,-1],[1,0],[-1,0]]def main():n,m=map(int,input().split())graph=[]for i in range(n):graph.append(list(map(int,input().split())))visit=[[False]*m for _ in range(n)]result=0for i in range(n):for j in range(m):if graph[i][j]==1 and not visit[i][j]:result+=1dfs(graph,visit,i,j)print(result)def dfs(graph,visit,x,y):if visit[x][y] or graph[x][y]==0:returnvisit[x][y]=Truefor i,j in direction:next_x=x+inext_y=y+jif next_x<0 or next_x>=len(graph):continueif next_y<0 or next_y>=len(graph[0]):continueif not visit[next_x][next_y] and graph[next_x][next_y]==1:dfs(graph,visit,next_x,next_y)if __name__=="__main__":main()

99.岛屿数量 广搜

99. 计数孤岛

代码随想录

思路:同样的,这道题是广搜的模板题,不过其实我对广搜不熟悉,所以写起来挺费劲的。广搜和之前二叉树的层序遍历一样,都要使用队列。main函数的部分,其实和dfs相同,在进入了bfs之后,首先给自己的位置visit数组变成True,然后将这个位置加入队列,接下来遍历队列,将每个方向的合法新位置加入队列,直到队列为空。

from collections import deque
directions=[[0,1],[0,-1],[1,0],[-1,0]]def main():n,m=map(int,input().split())graph=[]for i in range(n):graph.append(list(map(int,input().split())))visit=[[False]*m for _ in range(n)]result=0for i in range(n):for j in range(m):if not visit[i][j] and graph[i][j]==1:result+=1bfs(graph,visit,i,j)print(result)def bfs(graph,visit,x,y):que=deque([])que.append([x,y])visit[x][y]=Truewhile 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(graph) or next_y<0 or next_y>=len(graph[0]):continueif not visit[next_x][next_y] and graph[next_x][next_y]==1:que.append([next_x,next_y])visit[next_x][next_y]=Trueif __name__=="__main__":main()

100.岛屿的最大面积 

100. 最大岛屿的面积

代码随想录

思路:这道题基本上就是模板题上加一个统计,不过需要注意的有两个点。一个是cnt+1只会在判断合法后使用,第二个就是cnt如果要全局定义有两种方法,一是将cnt定义为一个数组,所有变化都发生在cnt[0]上,二是在dfs中定义nonlocal cnt

cnt=[0]
directions=[[1,0],[-1,0],[0,1],[0,-1]]def main():n,m=map(int,input().split())graph=[]for i in range(n):graph.append(list(map(int,input().split())))visit=[[False]*m for _ in range(n)]result=0for i in range(n):for j in range(m):if not visit[i][j] and graph[i][j]==1:visit[i][j]=Truecnt[0]=1dfs(graph,visit,i,j)result=max(result,cnt[0])print(result)def dfs(graph,visit,x,y):for i,j in directions:next_x=x+inext_y=y+jif next_x<0 or next_x>=len(graph):continueif next_y<0 or next_y>=len(graph[0]):continueif not visit[next_x][next_y] and graph[next_x][next_y]:visit[next_x][next_y]=Truecnt[0]+=1dfs(graph,visit,next_x,next_y)if __name__=="__main__":main()
directions=[[1,0],[-1,0],[0,1],[0,-1]]def main():n,m=map(int,input().split())graph=[]for i in range(n):graph.append(list(map(int,input().split())))visit=[[False]*m for _ in range(n)]result=0def dfs(graph,visit,x,y):nonlocal cntfor i,j in directions:next_x=x+inext_y=y+jif next_x<0 or next_x>=len(graph):continueif next_y<0 or next_y>=len(graph[0]):continueif not visit[next_x][next_y] and graph[next_x][next_y]:visit[next_x][next_y]=Truecnt+=1dfs(graph,visit,next_x,next_y)for i in range(n):for j in range(m):if not visit[i][j] and graph[i][j]==1:visit[i][j]=Truecnt=1dfs(graph,visit,i,j)result=max(result,cnt)print(result)if __name__=="__main__":main()

http://www.dtcms.com/a/406246.html

相关文章:

  • Maven setting文件中<mirrors>(镜像)和 <servers>两个标签的区别
  • 论坛门户网站建设运营费用八度 网站建设
  • iOS 26 设备文件管理实战指南,文件访问、沙盒导出、系统变更与 uni-app 项目适配
  • 【数据结构】List 详解
  • 网站哪个做的好织梦cms手机网站
  • Golang面试-Channel
  • Go channel 的底层实现
  • uniapp USB UVC 摄像头调用的最佳实现 支持Android5到Android16 v2
  • 【uni-app】树形结构数据选择框
  • 视频解析网站甜品蛋糕网站建设策划书
  • PostgreSQL 中序列(Sequence)的详细用法
  • 超低延迟与高并发保障:互联网直播点播平台EasyDSS如何成为企业级现场直播的“技术底座”?
  • 一种个性化认知型人形机器人端到端的架构设计
  • Frp内网穿透v0.64.0
  • 9.25交作业
  • 【原理与应用】3-flink安装与部署
  • 网站经营性备案难不难良品铺子网络营销策划书
  • 永磁同步电机驱动控制系统设计(论文+仿真)
  • Cherry Studio+Ollama+大模型+向量模型,实现RAG私有知识库。智能体实现EXCEL转化为一个报表图表
  • Ansible Playbook 入门指南:从基础到实战
  • 什么是提示词追问?
  • 【MD编辑器Typora】Typora最新 V1.12.1版:轻量级 Markdown 编辑器详细图文下载安装使用指南 【办公学习神器之MD文本编辑器】
  • 内外外贸购物网站建设seo基础优化包括哪些内容
  • 冰雪守护者:输电线路图像识别覆冰监测系统为电网保驾护航
  • MCU的闪存(FLASH)存储器的接口寄存器
  • 软件毕设代做网站阿里云建设网站的流程
  • 第12篇|[特殊字符] Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
  • k8s etcd 运行错误 failed to find plugin “flannel“ in path [/usr/lib/cni]
  • 【LeetCode - 每日1题】计算三角形最小路径和
  • 信息安全工程师考点-安全体系结构