【剑指offer2】 chap15 图

十五、图

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> allPathsSourceTarget(int[][] graph) {
        List> result = new LinkedList<>();
        List path = new LinkedList();
        dfs(0, graph, path, result);
        return result;
    }

    private void dfs(int start, int[][] graph, List path, List> 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. 情侣牵手

你可能感兴趣的:(剑指offer刷题笔记,数据结构,算法,java)