2020考研初试的时间已经越来越近了,大家的专业课的复习也要抓紧了,报考计算机的小伙伴要考哪些知识呢?跟着天任启航一起来看看图的知识点吧!
1、图的存储结构
图的存储结构有十字链表、邻接多重表、边集数组等。此外,图G=(V,
E)有两种标准的表示方法,一个是邻接矩阵,另一个是邻接链表,这两种方法都可以表示有向图和无向图。
邻接矩阵
邻接矩阵是用两个数组来表示一个图:一个一维数组用来存储每个顶点的信息;一个二维数组(即邻接矩阵)用来存储图中的边或弧信息。对于图G =(V,
E)来说,邻接矩阵matrix是一个|V|*|V|的方阵,假设1 <= i, j <= |V|,如果matrix[i][j] ==
0,则表示顶点i和顶点j之间没有边相连;反之,如果matrix[i][j] !=
0,则表示表示顶点i和顶点j之间有边相连,且matrix[i][j]存储的值即为该边的权重。
邻接链表
邻接链表是一种不错的图存储结构,由于它在表示稀疏图的时候非常紧凑而成为通常的选择。对于图G =(V,
E)来说,在其邻接链表表示中,每个结点对应一条链表,因此这个图里有V条链表。假设用一个V维的数组Adj来存储这V条链表,且Adj[i]表示的是结点i对应的链表,那么Adj[i]这条链表里存储的就是所有与节点i之间有边相连的结点,即与结点i相邻的结点。
2、图的遍历
图的遍历算法有两种,包括广度优先遍历(BFS)和深度优先遍历(DFS)。遍历是指从图中的某个顶点出发,访问图中其余的顶点,且每个顶点只被访问一次的过程称为图的遍历。
深度优先遍历
指定一点为顶点,进行标记,并查找该节点的任意一个相邻节点。若该相邻节点未被访问,则对其进行标记,并进入递归,查找它的未被标记访问的邻接节点;若该节点已被访问标记,则回退到上级节点,查找它未被标记访问的邻接节点,再进入递归,直到与起点相通的全部顶点都被标记访问为止。若所有节点都被标记访问,就结束;反之,如果还有节点未被访问,则需要以该节点为顶点进行下一步的递归查找,直到所有点都被标记访问。
广度优先遍历
从一点出发,查出它的邻接节点放入队列并标记,然后从队列中弹出第一个节点,寻找它的邻接未被访问的节点放入队列,直至所有已被访问的节点的邻接点都被访问过;若图中还有未被访问的点,则另选一个未被访问的点出发,执行相同的操作,直至图中所有节点都被访问。
3、拓扑排序
拓扑排序是在有向图上对入度(先、后)为零的顶点的一种排序,通常结果不唯一。拓
扑排序有两种方法,一是无前趋的顶点优先算法,二是无后继的顶点优先算法。换句话说,一种是“从前向后”的排序,一种是“从后向前”排。后一种排序出来的结果
是“逆拓扑有序”的。用拓扑排序和深度优先遍历都可判断图是否存在环路。
对一个有向无环图进行拓扑排序的基本思路是:从图中选出一个入度为0的顶点输出,然后删掉这个顶点,并且删去以这个顶点为尾的弧,然后重复上述步骤,直至全部顶点输出。
文中图片素材来源网络,如有侵权请联系删除