概述
- 邻接矩阵
- 广度优先搜索
- 深度优先搜索
- 拓扑排序
小试牛刀
1 | 单选题 |
邻接和关联
临接关系:顶点和顶点之间
关联关系:顶点和边之间
无向图和有向图
路径和环路
欧拉环路:一个经过所有的边一次且恰好一次(覆盖了图中所有的边)
哈密尔顿环路
1 | 单选题 |
邻接矩阵
如何在计算机中以数据结构表示并且实现图
邻接矩阵:n 行 n 列
关联矩阵:n 行 e 列
n 为节点的个数,e为边的个数。
顶点定义:
边定义:
邻接矩阵定义:
顶点操作
对于顶点 i , 枚举其所有的邻接顶点 neighbor
边操作:
边插入:
边删除:
顶点动态操作:
题:
1 | 图G包含n个顶点(n>0),用邻接矩阵实现。在其中加入一个新的顶点后邻接矩阵增加了多少项? 2n + 1 |
广度优先搜索
Graph -> Tree
对多连通域,可以遍历节点,如果节点为UNDISCOVERED,则BFS() 遍历。
每个连通域会执行一次BFS()
复杂度
使用邻接表
最短路径:
1 | 对于用邻接表实现的包含n个顶点e条边的图,BFS的时间复杂度为: O(n + e) |
深度优先搜索
框架:
细节:
无向图实例:
有向图实例:
嵌套引理:
拓扑排序
任何有向无环图G中,必有一个零入度的顶点m
习题
1 | 填空题 |
1 | A total of 7 people took part in the banquet and a friendly handshake took place among the participants. The number of hands-on handshakes known to each of them is: |
7.
1 | 用邻接矩阵实现含n个顶点e条边的图: |
8.
1 | Time complexity of deleting edge(i,j): 删除边(i, j)的时间复杂度:O(1) |
9.
1 | Time complexity of traversing all the neighbors of vertex v: 遍历顶点v的所有邻居的时间复杂度:O(n) |
10.
1 | 访问顶点v中存储的数据的时间复杂度:O(1) |
11.
1 | G是有向无环图,(u, v)是G中的一条由u指向v的边。对G进行DFS的结果是: C |
12.
1 | 下面是对一个简单无向图进行DFS后得到各顶点的dTime和fTime: |
13.
填空题 (4分)
1 | Starting from s, perform BFS on the above undigraph, order a~z between the neighbors of the same vertex, and find the dTime of the vertex |
14.
1 | 从s开始,对以上无向图进行DFS,同一顶点的邻居之间以a~z为序,求各顶点的dTime和fTime |
zhangzezhong
学习自:清华大学邓俊辉老师《数据结构》课程第六章 图