c语言数据结构学习心得——图

图G由顶点集V和边集E组成,记为G=(V,E)

图不可为空,一定有顶点集不为空

有向图:有向边(弧)的有限集合

无向图:无向边的有限集合

连通:顶点V到顶点V'有路径

连通分量:无向图中的极大连通子图(极大:1.顶点足够多;2.极大连通子图包含依附这些点的所有边)

强连通分量:有向图中的极大强连通子图

连通的生成树:包含图中的全部n个顶点,但只有n-1条边的极小连通子图

度:以该顶点为一个端点的边数目

入度(ID):以顶点为终点的有向边数目

出度(OD):以顶点为起点的有向边数目

 

图的存储结构

邻接矩阵(顺序存储)

顶点:用一维数组存储 边/弧:用二维数组存储

#define MaxVertexNum 100 //顶点数目最大值
typedef char VertexType;  //顶点的数据类型项,不同情况不一样
typedef int EdgeType;  //整数表示权值或者连通性
typedef struct{
   VertexType Vex[MaxVertexNum]; //顶点表
   EdgeType [MaxVertexNum][MaxVertexNum]; //邻接矩阵
   int vexnum,arcnum;  //图的当前顶点数和弧数
}MGraph

邻接表:存储的无向图中查找顶点容易,但是修改边或者查询边需要遍历链表。

图的遍历

从图中某一顶点出发,访遍图中其余顶点,且使每一个顶点仅被访问一次。

BFS(广度优先遍历):类似于树的层序遍历算法

时间复杂度:

邻接表:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以访问该顶点所有边,O(|E|),所以总时间复杂度O(|V|+|E|)。

邻接矩阵:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以遍历矩阵,O(|V|),所以总时间复杂度O(|V|2|)。

DFS(深度优先遍历):类似于树的先序遍历算法。

邻接表:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以访问该顶点所有边,O(|E|),所以总时间复杂度O(|V|+|E|)。

邻接矩阵:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以遍历矩阵,O(|V|),所以总时间复杂度O(|V|2|)。

猜你喜欢

转载自www.cnblogs.com/suprechen/p/10611623.html
今日推荐