第十一章 图论 Part4

目录
  • 任务
    • 127. 单词接龙
      • 思路
    • Kama105.有向图的完全可达性
      • 思路
    • 463. 岛屿的周长
      • 思路

任务

127. 单词接龙

字典 wordList 中从单词 beginWord 到 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk:

  • 每一对相邻的单词只差一个字母。
  • 对于 1 <= i <= k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。
  • sk == endWord

给你两个单词 beginWord 和 endWord 和一个字典 wordList ,返回 从 beginWord 到 endWord 的 最短转换序列 中的 单词数目 。如果不存在这样的转换序列,返回 0

思路

由于是求最短路径,实际转化为通过bfs第一次遍历到endWord的情况。bfs的逻辑与二叉树层序遍历的逻辑相似,可以参考二叉树层序遍历的逻辑

class Solution:def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:if endWord not in wordList:return 0wordSet = set(wordList)que = deque()que.append(beginWord)pathLength = 1while que: # 处理所有节点for _ in range(len(que)): # 处理每层全部节点curWord = que.popleft()for i in range(len(curWord)):newWord  = curWordfor j in range(26):character=  chr(ord('a') + j)newWord = newWord[:i] + character + newWord[i+1:]if newWord == endWord:return pathLength+1if newWord in wordSet:wordSet.remove(newWord)que.append(newWord)pathLength += 1return 0

Kama105.有向图的完全可达性

给定一个有向图,包含 N 个节点,节点编号分别为 1,2,...,N。现从 1 号节点开始,如果可以从 1 号节点的边可以到达任何节点,则输出 1,否则输出 -1。

思路

由于是有向图,实际上就是dfs的应用,需要注意的是有很多种写法如

  • 终止条件写外面,处理当前节点,
  • 终止条件隐藏在遍历的过程中,处理下一个访问的节点
  • 终止条件隐藏在遍历过程中,处理当前节点(当前写法),类比之前输入为grid时的写法,只不过输入改成了邻接表

只要熟练掌握其中一种写法,其他写法可以理解即可。

def dfs(graph, key, visited):visited[key] = true; # 能到达的点标记为truefor (neibokey : graph[key]):if (visited[neibokey] == false): # 递归遍历没访问过的节点dfs(graph, neibokey, visited)    def canArrive(graph):visited = [[false] *len(graph[0]) for _ in range(graph)]dfs(graph,1,visited) # dfs遍历并标记走过的节点for i in range(len(visited)):if not visited[i]:return Falsereturn True

463. 岛屿的周长

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。

网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

思路

容易用惯性思维只要看到岛屿就要去遍历,实际上这道题求的是周长,不需要遍历,直观的,只要求岛屿的交接处是水域或者是边界的个数即可。

class Solution:def islandPerimeter(self, grid: List[List[int]]) -> int:dir = [(1,0),(0,1),(-1,0),(0,-1)] #逆时针四个方向res = 0for i in range(len(grid)):for j in range(len(grid[0])):if(grid[i][j] == 1):for k in range(4):x = i + dir[k][0]y = j + dir[k][1]if x < 0 or y<0 or x>=len(grid) or y>=len(grid[0]) or grid[x][y] == 0:#坐标在边界上: 或者坐标位置是水res += 1return res

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

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

相关文章

河道水面漂浮物识别检测

河道水面漂浮物识别检测根据监控摄像头搜集江河或湖水的短视频,截取图片中带有海上漂浮物的照片,河道水面漂浮物识别检测训练所需照片,形成数据实体模型,随后即时检测真正情景里的监控视频或照片。因而,完成检测的第一步是收集数据。河道水面漂浮物识别检测根据监控摄像头…

个人主页,简洁又好看,每个人都可以轻松搭建

今日周末不用上班,照例醒的很早,老婆孩子都还在睡觉,不便打扰,于是来到阁楼书房打开电脑,准备刷刷视频享受下愉快的周末休闲时光,启动浏览器,发现浏览器主页无法打开,主页指向的是我个人搭建的咖啡吧导航,一个囊括了我的常用网站及实用工具的导航站,配置的我的个人主…

P2056 [ZJOI2007] 捉迷藏

题意: 给出一个 \(n\) 个点的树,每个点有黑白两种颜色。初始时每个点都是黑色的。\(q\) 次操作,支持:C x 将第 \(x\) 个点的颜色反转。 G 询问树上两个黑色点的最远距离。分析: 尝试使用点分树,对于一条路径,可以从点分树的 \(lca\) 处统计,由于涉及到删除和添加两种操…

数学基础讲解-01

真题:易 设K法 消元的过程真题:2015 不定方程问题 必考 找到特征 解题入口 真题: 重点 没做出来一道题目,多解几次性质需要理解记忆 真题: 重点!!! 有陷阱、筛选作用 做错了 没考虑为0的情况 比较喜欢考细节 常见的坑不能约 需要移项一道题目做个三五遍不算多…

CF1945F Kirill and Mushrooms

题意 营地里的人一睡着,基里尔就偷偷溜出帐篷,去智者橡树那里采蘑菇。 众所周知,橡树下生长着 \(n\) 种蘑菇,每种蘑菇都有 \(v_i\) 的魔力。基里尔非常想用这些蘑菇制作一种魔力最大的灵药。 灵药的强度等于其中蘑菇的数量与这些蘑菇中最小魔力的乘积。为了配制灵药,基里尔…

我发布了一款相亲平台《i相遇》

因缘际会之下,我踏入了相亲平台的领域。起初,是为一位客户打造专属相亲应用,过程中深入体验了众多同类平台,却遗憾地发现它们普遍掺杂着欺诈的阴影——高昂的费用、兼职托儿的身影、以及虚假的钓鱼信息,不一而足。 完成客户项目后,我决定自己运营一款专为互联网人量身打造…

Linux系统安装ansiblle环境

前言:这里是生产环境红帽系统,如果是别的系统,本地源的配置方法不一样。 一、主节点服务器Redhat8 配置使用阿里源: 备份:sudo /etc/yum.repos.d/CentOS-Base.repo /opt/yum/ 下载新的CentOS-Base.repo 到 /etc/yum.repos.d/ (这里用的CentOS 8.0) 命令:sudo wget -O /…

1.hadoop入门

Hadoop入门一.概念1.hadoop是什么 (1)Hadoop是一个由apache基金会所开发的分布式系统基础架构(2)主要解决,海量数据的存储和海量数据的分析计算问题(3)广义上来说,hadoop通常是指一个更广泛的概念--hadoop生态圈2.Hadoop发展历史(1)创始人Doug Cutting,为了实现与Google类似的全…

JQuery的DOM操作

JQuery基础教程第四版第五章:DOM操作方法的简单归纳 使用JQuery的DOM操作实现以下功能1.创建新元素2.插入新元素3.移动元素4.包装元素5.复制元素 相关代码 HTML文件<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"&g…

C++顺序结构(1)

1、C++程序的样子2、流 输出流 COUT<<3、一个实例及解析 // 001 程序的基本结构 //单行注释 /*多行注释 被注释过的内容不会被运行,可以用来做笔记。 基本结构: 1.头文件 程序包含某个头文件后,程序中的代码就可以使用这个头文件里的功能。 2.命名空间 3.主函数 类…

manim边学边做--角度标记

manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记。 对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样; 对于直角,角度标记是一个垂直的拐角。 manim中关于角度标记的模型主要有3个:Angle:根据两条直线绘制角度标记 RightAng…

关于Tailscale Subnet routers要说的

国内的水文很多,Tailscale的部署就不说了。简单的都有讲到,但凡深度一点儿的只能找找外边儿的文章了。 昨天刚给群晖装完Tailscale,打算着利用Subnet routers功能来访问另外的2个子网。 国内的水文在介绍这一段使用的时候是这样的:该文章提到:如果有多个网段添加,就多运行…