day53 第十一章:图论part04


title: 代码随想录 day53 第11章 图论part04

date: 2024-12-22 23:48:48

modificationDate: 2024 十二月 22日 星期日 23:48:48

categories:

  • carl

tags: \[\]

sticky: \[\]

hide: false

category_bar: true


**第十一章:图论part04**

经过上面的练习,大家可能会感觉 广搜不过如此,都刷出自信了,本题让大家初步感受一下,广搜难不在广搜本身,而是如何应用广搜。

https://www.programmercarl.com/kamacoder/0110.字符串接龙.html

```go

// ladderLength 实现 BFS 查找最短路径长度

func ladderLength(beginWord, endWord string, wordList \[\]string) int {

wordSet := make(mapstringstruct{})

for _, word := range wordList {

wordSetword = struct{}{}

}

if _, exists := wordSetendWord; !exists {

return 0

}

queue := \[\]string{beginWord}

visitMap := make(mapstringint)

visitMapbeginWord = 1

for len(queue) > 0 {

currentWord := queue0

queue = queue1:

path := visitMapcurrentWord

for i := 0; i < len(currentWord); i++ {

chars := \[\]rune(currentWord)

for ch := 'a'; ch <= 'z'; ch++ {

charsi = ch

newWord := string(chars)

if newWord == endWord {

return path + 1

}

if _, exists := wordSetnewWord; exists {

if _, visited := visitMapnewWord; !visited {

visitMapnewWord = path + 1

queue = append(queue, newWord)

}

}

}

}

}

return 0

}

```

深搜有细节,同样是深搜两种写法的区别,以及什么时候需要回溯操作呢?

https://www.programmercarl.com/kamacoder/0105.有向图的完全可达性.html

```python

import collections

path = set() # 纪录 BFS 所经过之节点

def bfs(root, graph):

global path

que = collections.deque(root)

while que:

cur = que.popleft()

path.add(cur)

for nei in graphcur:

que.append(nei)

graphcur = \[\]

return

def main():

N, K = map(int, input().strip().split())

graph = collections.defaultdict(list)

for _ in range(K):

src, dest = map(int, input().strip().split())

graphsrc.append(dest)

bfs(1, graph)

if path == {i for i in range(1, N + 1)}:

return 1

return -1

if name == "main":

print(main())

```

简单题,避免大家惯性思维,建议大家先独立做题。

https://www.programmercarl.com/kamacoder/0106.岛屿的周长.html

```python

def main():

import sys

input = sys.stdin.read

data = input().split()

读取 n 和 m

n = int(data0)

m = int(data1)

初始化 grid

grid = \[\]

index = 2

for i in range(n):

grid.append(int(data\[index + j) for j in range(m)])

index += m

sum_land = 0 # 陆地数量

cover = 0 # 相邻数量

for i in range(n):

for j in range(m):

if gridij == 1:

sum_land += 1

统计上边相邻陆地

if i - 1 >= 0 and gridi - 1j == 1:

cover += 1

统计左边相邻陆地

if j - 1 >= 0 and gridij - 1 == 1:

cover += 1

不统计下边和右边,避免重复计算

result = sum_land * 4 - cover * 2

print(result)

if name == "main":

main()

```

相关推荐
微小冷7 小时前
海康威视相机C#二次开发环境配置
数码相机·c#·.net·海康威视·相机开发
汉字萌萌哒7 小时前
2019CCF-CSP入门级C++试题解析
java·开发语言·c++
叠层归一研究院7 小时前
AGI 系统(十一):二阶网络 — 二阶递归 × 多主体 (元符号网络)
开发语言·人工智能·算法·php·agi
小雨笙笙7 小时前
C语言:变量三属性——存储类型
c语言·开发语言
果果燕8 小时前
C++ 学习笔记(二):类与对象—— 构造函数与析构函数
开发语言·c++
江畔柳前堤8 小时前
Function Calling 与 Tool Calling:从认知到工程的全景深度解析
开发语言·网络·人工智能·深度学习·算法·机器学习·php
2601_949950638 小时前
Java 面试准备,用练题簿把“背过八股”变成“真正会答”
java·开发语言·面试·刷题·小程序推荐
老洋葱Mr_Onion9 小时前
【C++】信息学奥赛CSP通关之路——CSP-J/S第一轮原创全真模拟试卷集(2026)卷四全卷解析
开发语言·c++
zander2589 小时前
LeetCode 739:每日温度——为什么单调栈要持续弹出
开发语言·python·算法
無限進步D9 小时前
Java 函数式编程(Lambda)
java·开发语言