面向过程编程和面向对象编程

所有可能的路径

要讲清楚要解决的问题(论文、例题、实际问题等)

要讲清楚涉及的图论知识(概念、算法等)

邻接表、邻接矩阵

回溯法

过程

/* 多叉树遍历框架 */
void traverse(TreeNode root) {
    if (root == null) return;

    for (TreeNode child : root.children) {
        traverse(child);
    }
}
// 记录被遍历过的节点
boolean[] visited;
// 记录从起点到当前节点的路径
boolean[] onPath;

/* 图遍历框架 */
void traverse(Graph graph, int s) {
    if (visited[s]) return;
    // 经过节点 s,标记为已遍历
    visited[s] = true;
    // 做选择:标记节点 s 在路径上
    onPath[s] = true;
    for (int neighbor : graph.neighbors(s)) {
        traverse(graph, neighbor);
    }
    // 撤销选择:节点 s 离开路径
    onPath[s] = false;
}

想法

各种数据结构被发明出来无非就是为了遍历和访问,所以「遍历」是所有数据结构的基础

做题有框架,即使睡着了也不会错太多。

posted @ 2022-05-01 14:36  Leventseleveil  阅读(25)  评论(0编辑  收藏  举报