Skip to content

图论算法(六)

About 1705 wordsAbout 6 min

graph图论

2024-03-28

分享丨【题单】图论算法(DFS/BFS/拓扑排序/最短路/最小生成树/二分图/基环树/欧拉路径)

刷题交流|【模拟退火算法】求解经典的地图填色问题 先码上,后面需要仔细的看一遍。

不得不说,灵神还是灵神呀,我现在只能用牛来形容。

对二叉树的简单了解

图论算法(DFS/BFS/拓扑排序/最短路/最小生成树/二分图/基环树/欧拉路径)

一、基础遍历

1.1、DFS基础

104. 二叉树的最大深度(20250326更新)

我们需要知道什么是二叉树的最大深度,就是从跟节点到最下方叶子节点经过的节点个数为二叉树的最大深度。

所以我们只需要遍历一次,记录最大深度就可以了。DFS和BFS都可以。

java

1.2、BFS基础

104. 二叉树的最大深度(20250326更新)

这个也可以写成BFS的形式。

BFS有三种写法,一种就是最简单的,把节点存进去然后取出来遍历,但是这一种没有办法记录层数;第二种就是通过一个for循环来记录每一层,相当于每层的权重是1;还有第三种就是节点维护自己的层级(权重)。

二叉树的递归/层序遍历

Java

二、其他

1791. 找出星型图的中心节点

有一个无向的星型图,由 n 个编号从 1 到 n 的节点组成,星型图有一个中心节点,并且恰有 n-1 条边将中心节点与其他节点连接起来。

给你一个二维整数数组 edges,其中 edges[i]=[ui, vi]表示在节点之间存在一条边,请你找出返回 edges 所有表示星型图的中心节点。

根据题意,中心节点必然出现在所有的 edges[i]中,根据第一条边,判断里面的两个数据是否在后面边里面,如果在的话,就是中心节点,否则就不是中心节点。

因为题目给出 n 是大于等于 3 的,必定是大于两个节点的。

class Solution {
    public int findCenter(int[][] edges) {
        int a = edges[0][0], b =edges[0][1];
        if(a == edges[1][0] || a == edges[1][1]){
            return a;
        }
        else{
            return b;
        }
    }
}

1557. 可以到达所有点的最少点数目

给你一个 有向无环图, n 个节点编码为 0 到 n-1, 以及一个变数组 edges,其中 edges[i] = [from, to], 表示一条从 from 到 to 的有向边。

找到最小的点集使得从这些点出发能到达图中所有的点,题目保证解存在且唯一。

你可以以任何顺序返回这些节点的编号。

最小的点集使得能够到达图的所有点,这里我们只需要找到入度为 0 的节点就是题目的解。

构建 java 列表并初始化的方式

1、List<Integer> list = Arrays.asList(1,2,3);

2、List<Integer> lit = new ArrayList<>(Arrays.asList(1,1,3));

3、List<String> lit = new ArrayList<>(Collections.singletonList("a", "b"));

图论基础及遍历算法

学习 labuladong 关于图相关的理论和知识点。

图的话和多叉树遍历类似,需要防止遍历的时候形成环,使用数据 visit 来表示每个节点是否被访问过。

图的存储的话有两种方式,一个是领接表,一个是领接矩阵,分别定义如下:

// 邻接表
List<Integer>[] graph;

// 邻接矩阵
boolean[][] graph;

如果是带权图的话,邻接表存储的时候顺便把权重也存起来,邻接矩阵的话,每个坐标存的就是权重,不是 true 或者 false。

度(degree),入度(indegree), 出度(outdegree)

矩阵(martix),顶点(vertex)

图的遍历模版:

LCR 110. 所有可能的路径

给定一个有 n 个节点的有向无环图,用二维数组 graph 表示,请找到所有从 0 到 n-1 的路径并输出。

graph 的第 i 个数组中的单元都表示有向图 i 号节点所能够到达的下一个节点。

从 0 节点开始遍历图,将到达 n-1 的路径保存下来。

547. 省份数量

这个题就是求无向图中的连通域的个数,直接 dfs/bfs。

题目给出的 isConnected 是邻接矩阵的存储方式。

Changelog

Last Updated: View All Changelog
  • refactor: 重构项目目录,将iron、sci加入到同一个github项目

    On 3/26/25
  • feat(algo): 二叉树

    On 3/26/25
  • feat: 调整算法的文件结构

    On 3/12/25
  • build: algo结构

    On 12/2/24
  • perf: 调整目录结构

    On 9/17/24
  • ci(plume): 项目侧边啦

    On 9/17/24
  • feat(力扣): 周赛

    On 6/16/24
  • feat: 并查集

    On 4/7/24
  • feat(图论): 省份数量

    On 4/1/24
  • feat: 2810故障键盘

    On 4/1/24
  • feat: 图论、前缀和、滑动窗口

    On 3/31/24

求求了,快滚去学习!!!

求求了求求了,快去学习吧!

【题单】贪心算法

不知道方向的时候,可以多看看书,书会给你指明下一步该干什么,加油!