【剑指offer2】 chap15 图

本文详细介绍了图的基本概念,包括有向图与无向图,以及邻接表和邻接矩阵两种存储方式。重点讲解了图的搜索算法,如广度优先搜索(BFS)和深度优先搜索(DFS),并给出了典型的应用场景,如最短路径问题和找到符合条件的路径。同时,提到了岛屿问题的解决方法,以及图论中的双色问题和拓扑排序。此外,还讨论了并查集在解决动态连接问题中的应用。最后,列举了一系列相关的编程题目,帮助读者加深理解和应用。
摘要由CSDN通过智能技术生成

十五、图

1、基础知识

有向图、无向图

邻接表(适合稀疏数据)、邻接矩阵(稀疏不适合)

2、图的搜索

(1)广度优先

实现方法:

  1. 起始点进队列,节点cur设为访问过

  2. 节点cur取队列

  3. 添加cur的子节点(未被访问过),并且设为访问过

  4. 跳转至2,直至队列无节点

适合题型:保证最短路径

剑指 Offer II 107. 矩阵中的距离   (剑指 Offer II 107. 矩阵中的距离)Y

剑指 Offer II 108. 单词演变   (127. 单词接龙)单向+双向广度优先搜索 Y

126. 单词接龙 II(复杂)

433. 最小基因变化

剑指 Offer II 109. 开密码锁

(2)深度优先

实现方法:

  1. 访问起始点cur,设为访问过

  2. 访问起始点的子节点(未被访问过),递归

适合题型:找到符合条件的路径

建图(邻接表、邻接矩阵)+ DFS + 主函数

剑指 Offer II 110. 所有路径  (有向无环图)

class Solution {
    public List<List<Integer>> allPathsSourceTarget(int[][] graph) {
        List<List<Integer>> result = new LinkedList<>();
        List<Integer> path = new LinkedList<Integer>();
        dfs(0, graph, path, result);
        return result;
    }

    private void dfs(int start, int[][] graph, List<Integer> path, List<List<Integer>> result) {
        path.add(start);
        if (start == graph.length - 1) {
            result.add(new LinkedList<>(path));
        } else {
            for (int next : graph[start]) {
                dfs(next, graph, path, result);
            }
        }
        path.remove(path.size() - 1);
    }
}

剑指 Offer II 111. 计算除法     (399. 除法求值

剑指 Offer II 112. 最长递增路径

(3)岛屿类(面积、个数、障碍)

面积(母题)    广度 (队列)+ 深度(栈)+深度(递归)

剑指 Offer II 105. 岛屿的最大面积695. 岛屿的最大面积

数量        200. 岛屿数量

周长        463. 岛屿的周长

填色     733. 图像渲染

130. 被围绕的区域

1034. 边界着色

(4)图论的「双色问题」

递归dfs 或 队列bfs     剑指 Offer II 106. 二分图    785. 判断二分图        886. 可能的二分法

所需变量:colors[m],graph[m][...]

对每一个格子进行涂色+调用能否涂色递归函数

(5)拓扑排序

作用:判断图是否有环,先后顺序的事件执行顺序

基本要素:构件图、入度数组(哈希表)、队列、路径动态数组

BFS步骤:

  • 添加所有入度为0的节点到队列中

  • while

    • 出队列+写入路径

    • 遍历邻居节点

      • 邻居节点入度--

        • 检查入度是否为0

          • 入队列

  • 返回值(排序的个数==原个数)

剑指 Offer II 113. 课程顺序    (210. 课程表 II

207. 课程表  (判断是否有环)

310. 最小高度树    将同一层出度为1 的节点剪枝

剑指 Offer II 114. 外星文字典  HashMap HashSet

剑指 Offer II 115. 重建序列   超序列和子序列

(6)并查集

含义:用来表示不相交集合的数据,支持 合并查找 两种操作,解决图的动态连接问题

步骤:

  1. 构建fathers数组或者哈希表

  2. 两两比较(合并判断及操作)

剑指 Offer II 116. 省份数量      省份数量

剑指 Offer II 117. 相似的字符串        839. 相似字符串组

剑指 Offer II 118. 多余的边        冗余连接

剑指 Offer II 119. 最长连续序列

除法求值

交换字符串中的元素

移除最多同行列的石头

打砖块

账户合并

连接所有点的最小费用

1319. 连通网络的操作次数

由斜杠划分区域

1579. 保证图可完全遍历

1631. 最小体力消耗路径

2021.2.14 情人节 每日一题 765. 情侣牵手

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值