一、本章学习小结 本章学习了图这一复杂的非线性数据结构,图包括有向图和无向图,有向图中又包含始点和终点,弧尾和弧头的概念。两者的本质区别应该是有无序。重点学习了DFS算法和BFS算法实现图的遍历,理解了迪杰斯特拉算法的逻辑思想。 1、图的基本术语(顶点数目为n,边数目为e) 子图、稀疏图和稠密图、权 ...
分类:
其他好文 时间:
2020-06-14 12:51:36
阅读次数:
76
import java.util.*;/** * 图的广度优先遍历 */public class BreadthFirst { public static void bfs(Node node) { if (node == null) { return; } Queue<Node> queue = ...
分类:
其他好文 时间:
2020-06-14 11:20:26
阅读次数:
70
import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Stack;/** * 图的深度优先遍历 */public class DepthFirst { public ...
分类:
其他好文 时间:
2020-06-14 10:50:30
阅读次数:
57
图的遍历是指访问图中的每一个顶点,且只访问一次。最经典的遍历图的方法就是深度优先遍历和广度优先遍历,这两种遍历方法都会产生一个生成树。我们用程序来实现这两种遍历算法的时候,一定要认真分析它们的算法思想以及具体细节,因为遍历图的顶点,每个顶点只能访问一次,所以需要专门设置一个访问标记数组用于标记顶点是 ...
分类:
其他好文 时间:
2020-06-14 01:16:13
阅读次数:
82
题目描述: 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回深度为3 深度优先遍历:先序遍历,可递归,可用栈 //C 递归 int maxDepth(st ...
分类:
其他好文 时间:
2020-06-13 10:36:10
阅读次数:
57
题目描述: 给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 深度优先遍历,递归或者用栈 //C //递归 bool isSameTree(struct TreeNode* p, struct TreeNode* q){ if(p = ...
分类:
其他好文 时间:
2020-06-12 14:24:15
阅读次数:
43
图论的约定和表述 给定图$G \ = \ (V,E)\(,以图的结点数\)|V|\(与边的条数\)|E|$作为输入的规模,同时,仅当在渐近符号(如大$O$表示或大$\Theta$表示)中,符号$V$表示$|V|$,符号$E$表示$|E|$,比如我们说算法的时间复杂度为$O(VE)$,同时,用$G.V ...
分类:
其他好文 时间:
2020-06-12 00:39:11
阅读次数:
50
图可以用邻接矩阵(顶点和顶点矩阵)和邻接表(顶点的链表)两种形式的结构来存储。 还有逆邻接表,顶点依然是头结点,但后续存的是谁指向你的。还有十字链表。。。 漫画:什么是 “图”?(修订版) 图的遍历:DFS,BFS 搞搞清楚! 漫画:深度优先遍历 和 广度优先遍历 二分图 如果可以用两种颜色对图中的 ...
分类:
其他好文 时间:
2020-06-11 21:25:40
阅读次数:
122
Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更 ...
分类:
编程语言 时间:
2020-06-11 16:28:39
阅读次数:
64
一笔画判断 时间限制:1秒 内存限制:128M 题目描述 如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。 根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数 ...
分类:
其他好文 时间:
2020-06-10 20:50:53
阅读次数:
208