这一章里主要学习了图的相关内容。
定义:由顶点(V)和边(E)的集合组成——分为有向图和无向图
存储结构:邻接矩阵——适用于稀疏图、顶点较多
邻接表——适用于稠密图、顶点较少或不需要记录权值
图的遍历:深度优先搜索(DFS)——类似于先序遍历
广度优先搜索(BFS)——类似于层次遍历
图的应用:最小生成树:Prime算法
Kruskal算法
最短路径:单源最短问题
多源最短问题
第六章作业:
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。
输入格式:
输入第1行给出2个整数N(0)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。
这道代码题思路是很容易理解,但有一个需要注意的地方就是,由于辅助数组visited定义的是 全局变量,所以在DFS遍历之后,要将visited归零,才能继续BFS遍历,而全局变量的修改并不像局部变量那样简单,上网查了之后,发现应该这样修改:memset(visited, false, sizeof(visited));这一点是特别需要注意的。
这一章学起来感觉有点困难,需要一定的空间想象能力,一般都会将图和矩阵或者表结合来看,才方便做题,如果题目没有给全两者的话,理解起来就会比较麻烦,归根到底还是学的不扎实的原因,希望能把书上的知识点和题目都理解透,继续提高写代码的能力。