数据结构第六章

图分为有向图和无向图

完全图:有向完全图 n(n-1)条弧,即每个两个顶点之间有两条互相指向的边

无向完全图n(n-1)/2条边

存储结构

1.邻接矩阵

数据结构第六章_第1张图片

 

adj[x][y]若有值(不为无限大),则代表x->y有一条有权值的边

 一般把不通的边设成INT_MAX而不是0

若所有边没有权值,可以把连通的设为1不连通的设为0

2.邻接表

先定义邻接点类型

该类型由一个顶点A的一条边指向的顶点B的信息和一个指向下一个A的边的指针(也为邻接点类型)构成

邻接表为一个结构体数组,每个顶点指向他的邻接点再指向下一个邻接点知道最后一个邻接点的指向下一条边的指针为NULL代表A没有下一条边了

图的遍历

深度优先搜索(DFS)应用递归,类似树的先序遍历,从一个顶点出发,先沿一条边进行遍历,这条边上全部顶点遍历完成后回到最近的分叉点遍历另一条

广度优先搜索(BFS)需要用到队列辅助,通过进队出队完成,从一个顶点出发,先输出所有与他相连的点,再从那些点出发继续遍历直到所有都被遍历过

应用

最小生成树

普利姆算法,从顶点开始,每次选出与已选点的集合中相连,权值最小一条边对应的顶点加入已选顶点中,然后刷新与他相关一些边的权值,直到所有点被选进去

克鲁斯卡尔算法,每次直接选出权值最小的边,然后将它对应的两个点连成一个连通分量,依次选直到所有点成一个连通分量

最短路径

迪杰斯特拉算法:数据结构第六章_第2张图片

 

先将与所选顶点相连的点加入已选点,设置他的前驱,然后选择每条最短路径的终点,设置它的前驱,每将一个点设置就更新一些最短路径的长度

 

你可能感兴趣的:(数据结构第六章)