面向过程编程和面向对象编程
所有可能的路径
要讲清楚要解决的问题(论文、例题、实际问题等)
要讲清楚涉及的图论知识(概念、算法等)
邻接表、邻接矩阵
回溯法
过程
/* 多叉树遍历框架 */
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;
}
想法
各种数据结构被发明出来无非就是为了遍历和访问,所以「遍历」是所有数据结构的基础。
做题有框架,即使睡着了也不会错太多。