news 2026/6/23 21:37:46

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第四十四天 | 99.岛屿数量 深搜 99.岛屿数量 广搜 100. 岛屿的最大面积

版本一的写法是 :下一个节点是否能合法已经判断完了,传进dfs函数的就是合法节点。

版本二的写法是:不管节点是否合法,上来就dfs,然后在终止条件的地方进行判断,不合法再return。

我在之前回溯算法做过笔记,我更偏好版本一。

xy老让我联想到坐标,我就不用xy了。也可以叫row、col。

package main import ( "bufio" "fmt" "os" ) var dir = [4][2]int{{0, 1}, {1, 0}, {-1, 0}, {0, -1}} func main() { in := bufio.NewReader(os.Stdin) var n, m int fmt.Fscan(in, &n, &m) grid := make([][]int, n) visited := make([][]bool, n) for i := range grid { grid[i] = make([]int, m) } for i := range visited { visited[i] = make([]bool, m) } for i := range grid { for j := range grid[i] { fmt.Fscan(in, &grid[i][j]) } } res := 0 for i := range grid { for j := range grid[i] { if grid[i][j] == 1 && !visited[i][j] { res++ visited[i][j] = true dfs(grid, visited, i, j) } } } fmt.Println(res) } func dfs(grid [][]int, visited [][]bool, i, j int) { for k := 0; k < 4; k++ { nextI := i + dir[k][0] nextJ := j + dir[k][1] if nextI < 0 || nextI >= len(grid) || nextJ < 0 || nextJ >= len(grid[0]) { continue } if grid[nextI][nextJ] == 1 && !visited[nextI][nextJ] { visited[nextI][nextJ] = true dfs(grid, visited, nextI, nextJ) } } }

如果节点出队列再标记为已访问过,会导致相同的节点重复入队列,进而导致队列中会有大量的重复节点。

package main import ( "bufio" "fmt" "os" ) var dir = [4][2]int{{0, 1}, {1, 0}, {-1, 0}, {0, -1}} func main() { in := bufio.NewReader(os.Stdin) var n, m int fmt.Fscan(in, &n, &m) grid := make([][]int, n) visited := make([][]bool, n) for i := range grid { grid[i] = make([]int, m) } for i := range visited { visited[i] = make([]bool, m) } for i := range grid { for j := range grid[i] { fmt.Fscan(in, &grid[i][j]) } } res := 0 for i := range grid { for j := range grid[i] { if grid[i][j] == 1 && !visited[i][j] { res++ visited[i][j] = true bfs(grid, visited, i, j) } } } fmt.Println(res) } type Pair struct { i, j int } func bfs(grid [][]int, visited [][]bool, row, col int) { q := make([]Pair, 0) q = append(q, Pair{row, col}) visited[row][col] = true for len(q) != 0 { cur := q[0] q = q[1:] for k := 0; k < 4; k++ { nextI := cur.i + dir[k][0] nextJ := cur.j + dir[k][1] if nextI < 0 || nextI >= len(grid) || nextJ < 0 || nextJ >= len(grid[0]) { continue } if grid[nextI][nextJ] == 1 && !visited[nextI][nextJ] { q = append(q, Pair{nextI, nextJ}) visited[nextI][nextJ] = true } } } }

easy

package main import ( "bufio" "fmt" "os" ) var dir = [4][2]int{{0, 1}, {1, 0}, {-1, 0}, {0, -1}} var count int func main() { in := bufio.NewReader(os.Stdin) var n, m int fmt.Fscan(in, &n, &m) grid := make([][]int, n) visited := make([][]bool, n) for i := range grid { grid[i] = make([]int, m) } for i := range visited { visited[i] = make([]bool, m) } for i := range grid { for j := range grid[i] { fmt.Fscan(in, &grid[i][j]) } } res := 0 for i := range grid { for j := range grid[i] { if grid[i][j] == 1 && !visited[i][j] { visited[i][j] = true count = 1 dfs(grid, visited, i, j) if count > res { res = count } } } } fmt.Println(res) } func dfs(grid [][]int, visited [][]bool, i, j int) { for k := 0; k < 4; k++ { nextI := i + dir[k][0] nextJ := j + dir[k][1] if nextI < 0 || nextI >= len(grid) || nextJ < 0 || nextJ >= len(grid[0]) { continue } if grid[nextI][nextJ] == 1 && !visited[nextI][nextJ] { visited[nextI][nextJ] = true count++ dfs(grid, visited, nextI, nextJ) } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:04:05

Windows验机

跳过联网进入系统 检查是否有运输模式&#xff1a;不外接电源开不了机开机之后&#xff0c;不要操作&#xff0c;按 shiftf10 进入cmd输入 oobe\bypassnro &#xff0c;此时会重启并跳过联网进入系统 验机 查看电源通电时间&#xff1a;打开CMD终端&#xff0c;输入powercfg…

作者头像 李华
网站建设 2026/6/23 14:04:06

别让孩子视力提早“透支” ,这份护眼指南请收好

如今&#xff0c;电子产品成了孩子的“日常陪伴”&#xff0c;线上学习、娱乐样样离不开&#xff1b;叠加堆积如山的作业与课外辅导&#xff0c;双重压力下&#xff0c;越来越多孩子的视力早早亮起“红灯”——近视低龄化、高发化的趋势愈发严峻&#xff0c;不少家长刚上小学的…

作者头像 李华
网站建设 2026/6/23 19:36:24

儿童青少年近视干预科学指引,破解家长近视防控焦虑

近年来&#xff0c;我国经济社会快速发展推动电子产品全面普及&#xff0c;儿童青少年的生活与学习模式随之改变&#xff0c;眼健康问题愈发凸显。国家卫健委最新数据显示&#xff0c;我国儿童青少年总体近视率已达52.7%&#xff0c;且近视呈现明显的低龄化、重度化趋势&#x…

作者头像 李华
网站建设 2026/6/22 23:16:59

解析 .NET 核心基石:CTS、CLS 与 CLR 的核心价值与协同作用

.NET 框架的成功和其跨语言、跨平台能力的实现&#xff0c;离不开三大核心组件&#xff1a;通用类型系统 (CTS)、通用语言规范 (CLS) 和 公共语言运行库 (CLR)。这三者各自承担重要角色&#xff0c;但又紧密协作&#xff0c;共同构成了 .NET 生态的基础。掌握它们的作用是理解 …

作者头像 李华
网站建设 2026/6/23 19:33:57

Selinux权限的检测

Selinux权限的检测 当主体要真正去访问客体资源的时候&#xff0c;会去触发安全的认证的检测过程&#xff0c;比如说它有对应的权限&#xff0c;放行&#xff0c;如果没对应的权限&#xff0c;就访问失败&#xff0c;问题是&#xff0c;由谁来监控权限的合法性工作&#xff1f;…

作者头像 李华