第6章 图的学习总结(邻接矩阵&邻接表)

我觉得图这一章的学习内容更有难度,其实图可以说是树结构更为普通的表现形式,它的每个元素都可以与多个元素之间相关联,所以结构比树更复杂,然而越复杂的数据结构在现实中用途就越大了,功能与用途密切联系,所以,图结构非常重要,学习起来也是有点难度的,在于图的存储结构和逻辑结构,以及它与其他辅助数据结构相结合(链表,队列等),这需要很清晰的逻辑思维,才能把知识贯通。

这么重要的图,它的特别重要应用(最小生成树、最短路径、拓扑排序、关键路径),还有这些应用中一些著名算法,图的这章内容的丰富,让我大开眼界!

学习图最基础的内容,也是实现其他操作最基础、最关键的部分,就是图的存储结构,图的遍历。这里我准备总结一下在做题目时候对邻接矩阵、邻接表,深度优先搜索遍历、广度优先搜索遍历的理解,而对于应用的各种算法,还需要继续学习,才有更深刻的理解。

PTA上题目:列出连通集

 

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

 

输入格式:

 

输入第1行给出2个整数N(0<N10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

 

输出格式:

 

按照 “ { v1, v2, v3, ... ,vk } ”的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:                         输出样例: 8 6            { 0 1 4 2 7 }
0 7            { 3 5 }
0 1            { 6 }
2 0            { 0 1 2 7 4 }
4 1            { 3 5 }
2 4            { 6 }
3 5

跟据这道题题意,可明显以看出用邻接矩阵的存储结构较容易,而且输入中没有顶点名,直接用数组下标就可以,所以存储输入数据还是比较简单实现的,下面是邻接矩阵存储定义:

第6章 图的学习总结(邻接矩阵&邻接表)

第6章 图的学习总结(邻接矩阵&邻接表)

typedef int ArcType; // type char VerTexType;//顶点名字,这道题不需要用到 typedef struct { VerTexType vexs[100];//顶点表 ArcType arcs[100][100];//邻接矩阵 int vexnum,arcnum;//顶点数和边数 }AMGraph;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwygzz.html