代码随想录 day50 第十一章 图论part01

devtools/2024/12/26 12:18:56/

第十一章:图论part01

图论理论基础

大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。

理论基础大家先对各个概念有个印象就好,后面在刷题的过程中,每个知识点都会得到巩固。

https://www.programmercarl.com/kamacoder/%E5%9B%BE%E8%AE%BA%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

深搜理论基础

了解一下深搜的原理和过程

https://www.programmercarl.com/kamacoder/%E5%9B%BE%E8%AE%BA%E6%B7%B1%E6%90%9C%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

可以使用邻接矩阵来表示图

邻接矩阵 使用 二维数组来表示图结构。 邻接矩阵是从节点的角度来表示图,有多少节点就申请多大的二维数组。

例如: grid[2][5] = 6,表示 节点 2 连接 节点5 为有向图,节点2 指向 节点5,边的权值为6。

如果想表示无向图,即:grid[2][5] = 6,grid[5][2] = 6,表示节点2 与 节点5 相互连通,权值为6。

如图:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在一个 n (节点数)为8 的图中,就需要申请 8 * 8 这么大的空间。

98. 所有可达路径

https://www.programmercarl.com/kamacoder/0098.%E6%89%80%E6%9C%89%E5%8F%AF%E8%BE%BE%E8%B7%AF%E5%BE%84.html


package mainimport ("fmt"
)var result [][]int // 收集符合条件的路径
var path []int     // 1节点到终点的路径func dfs(graph [][]int, x, n int) {// 当前遍历的节点x 到达节点nif x == n { // 找到符合条件的一条路径temp := make([]int, len(path))copy(temp, path)result = append(result, temp)return}for i := 1; i <= n; i++ { // 遍历节点x链接的所有节点if graph[x][i] == 1 { // 找到 x链接的节点path = append(path, i)    // 遍历到的节点加入到路径中来dfs(graph, i, n)          // 进入下一层递归path = path[:len(path)-1] // 回溯,撤销本节点}}
}func main() {var n, m intfmt.Scanf("%d %d", &n, &m)// 节点编号从1到n,所以申请 n+1 这么大的数组graph := make([][]int, n+1)for i := range graph {graph[i] = make([]int, n+1)}for i := 0; i < m; i++ {var s, t intfmt.Scanf("%d %d", &s, &t)// 使用邻接矩阵表示无向图,1 表示 s 与 t 是相连的graph[s][t] = 1}path = append(path, 1) // 无论什么路径已经是从1节点出发dfs(graph, 1, n)       // 开始遍历// 输出结果if len(result) == 0 {fmt.Println(-1)} else {for _, pa := range result {for i := 0; i < len(pa)-1; i++ {fmt.Print(pa[i], " ")}fmt.Println(pa[len(pa)-1])}}
}

广搜理论基础

https://www.programmercarl.com/kamacoder/%E5%9B%BE%E8%AE%BA%E5%B9%BF%E6%90%9C%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

广搜(bfs)是一圈一圈的搜索过程,和深搜(dfs)是一条路跑到黑然后再回溯。

广搜的搜索方式就适合于解决两个点之间的最短路径问题。

因为广搜是从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。

当然,也有一些问题是广搜 和 深搜都可以解决的,例如岛屿问题,这类问题的特征就是不涉及具体的遍历方式,只要能把相邻且相同属性的节点标记上就行


http://www.ppmy.cn/devtools/145195.html

相关文章

【JavaEE进阶】@RequestMapping注解

目录 &#x1f4d5;前言 &#x1f334;项目准备 &#x1f332;建立连接 &#x1f6a9;RequestMapping注解 &#x1f6a9;RequestMapping 注解介绍 &#x1f384;RequestMapping是GET还是POST请求&#xff1f; &#x1f6a9;通过Fiddler查看 &#x1f6a9;Postman查看 …

设计模式--抽象工厂模式【创建型模式】

设计模式的分类 我们都知道有 23 种设计模式&#xff0c;这 23 种设计模式可分为如下三类&#xff1a; 创建型模式&#xff08;5 种&#xff09;&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff08;7 种&#xff09;&#xff1…

leetcode hot100 搜索二维矩阵

240. 搜索二维矩阵 II 已解答 中等 相关标签 相关企业 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列 class Solution(object): def searchMatrix(self…

Excel中index()函数

函数功能概述 INDEX 函数用于返回表格或区域中的值或对值的引用。它可以根据指定的行和列的位置从一个单元格区域中提取数据。这个函数有两种形式&#xff1a;数组形式和引用形式。语法结构&#xff08;数组形式&#xff09; INDEX(array, row_num, column_num)array&#xff0…

Hadoop、Hbase使用Snappy压缩

1. 前期准备 系统环境&#xff1a;centos7.9 配置信息&#xff1a;8C8G100G hadoop和hbase为单节点部署模式 jdk版本jdk1.8.0_361 1.1. 修改系统时间 timedatectl set-timezone <TimeZone> 1.2. 修改主机名以及主机名和IP的映射 vim /etc/hosts #将自己的主机名以及…

FTT变换Matlab代码解释及应用场景

代码解释 1. 整体结构与初始化部分 clear all;close all; clc这三条语句是 MATLAB 编程中常见的开头操作。clear all 用于清除工作区中的所有变量&#xff0c;确保后续代码运行时不会受到之前遗留变量的干扰&#xff1b;close all 会关闭所有已经打开的图形窗口&#xff0c;避…

【漏洞复现】CVE-2021-45788 SQL Injection

漏洞信息 NVD - cve-2021-45788 Time-based SQL Injection vulnerabilities were found in Metersphere v1.15.4 via the “orders” parameter. Authenticated users can control the parameters in the “order by” statement, which causing SQL injection. API: /test…

vue2+element 前端表格下载

前台下载table表格 可下载fixed columns和普通平铺的表格 exportExcel() {const tableContainer document.querySelector(#table)const fixflg tableContainer ? tableContainer.querySelector(.el-table__fixed) : null// const fixflg document.querySelector(.el-table_…