代码随想录 day52 第十一章 图论part03

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466


title: 代码随想录 day52 第十一章 图论part03
date: 2024-12-23 01:35:07
modificationDate: 2024 十二月 23日 星期一 01:35:07
categories:
- carl
tags: []
sticky: []
hide: false
category_bar: true


第十一章:图论part03

101.  孤岛的总面积

底子标题 可以本身尝试做一做 。
https://www.programmercarl.com/kamacoder/0101.%E5%AD%A4%E5%B2%9B%E7%9A%84%E6%80%BB%E9%9D%A2%E7%A7%AF.html
  1. package main
  2. import (
  3.     "fmt"
  4. )
  5. var count int
  6. var dir = [4][2]int{{0, 1}, {1, 0}, {-1, 0}, {0, -1}} // 四个方向
  7. func bfs(grid [][]int, x, y int) {
  8.     queue := [][2]int{{x, y}}
  9.     grid[x][y] = 0 // 只要加入队列,立刻标记
  10.     count++
  11.    
  12.     for len(queue) > 0 {
  13.         cur := queue[0]
  14.         queue = queue[1:]
  15.         curx, cury := cur[0], cur[1]
  16.         
  17.         for i := 0; i < 4; i++ {
  18.             nextx := curx + dir[i][0]
  19.             nexty := cury + dir[i][1]
  20.             
  21.             if nextx < 0 || nextx >= len(grid) || nexty < 0 || nexty >= len(grid[0]) {
  22.                 continue // 越界了,直接跳过
  23.             }
  24.             
  25.             if grid[nextx][nexty] == 1 {
  26.                 queue = append(queue, [2]int{nextx, nexty})
  27.                 count++
  28.                 grid[nextx][nexty] = 0 // 只要加入队列立刻标记
  29.             }
  30.         }
  31.     }
  32. }
  33. func main() {
  34.     var n, m int
  35.     fmt.Scan(&n, &m)
  36.    
  37.     grid := make([][]int, n)
  38.     for i := range grid {
  39.         grid[i] = make([]int, m)
  40.     }
  41.    
  42.     for i := 0; i < n; i++ {
  43.         for j := 0; j < m; j++ {
  44.             fmt.Scan(&grid[i][j])
  45.         }
  46.     }
  47.    
  48.     // 从左侧边,和右侧边向中间遍历
  49.     for i := 0; i < n; i++ {
  50.         if grid[i][0] == 1 {
  51.             bfs(grid, i, 0)
  52.         }
  53.         if grid[i][m-1] == 1 {
  54.             bfs(grid, i, m-1)
  55.         }
  56.     }
  57.    
  58.     // 从上边和下边向中间遍历
  59.     for j := 0; j < m; j++ {
  60.         if grid[0][j] == 1 {
  61.             bfs(grid, 0, j)
  62.         }
  63.         if grid[n-1][j] == 1 {
  64.             bfs(grid, n-1, j)
  65.         }
  66.     }
  67.    
  68.     // 清空之前的计数
  69.     count = 0
  70.    
  71.     // 遍历所有位置
  72.     for i := 0; i < n; i++ {
  73.         for j := 0; j < m; j++ {
  74.             if grid[i][j] == 1 {
  75.                 bfs(grid, i, j)
  76.             }
  77.         }
  78.     }
  79.    
  80.     fmt.Println(count)
  81. }
复制代码
102.  沉没孤岛

和上一题差不多,尝试本身做做
https://www.programmercarl.com/kamacoder/0102.%E6%B2%89%E6%B2%A1%E5%AD%A4%E5%B2%9B.html
103.  水流题目

需要点优化思路,发起先本身读题,相处一个解题方法,有时间就本身写代码,没时间就直接看题解,优化方式 会让你 耳目一新。
https://www.programmercarl.com/kamacoder/0103.%E6%B0%B4%E6%B5%81%E9%97%AE%E9%A2%98.html
104.建造最大岛屿

同样优化思路也会让你耳目一新,本身想比力难想出来。
https://www.programmercarl.com/kamacoder/0104.%E5%BB%BA%E9%80%A0%E6%9C%80%E5%A4%A7%E5%B2%9B%E5%B1%BF.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表