一.图的性质
1.1.总结无向图、有向图的结点数、边数、度数、连通性、强连通性等性质之间的关系
n为顶点数
-连通:顶点v到顶点W有路径存在
-连通图:任意两个顶点连通的无向图
-连通分量:无向连通图的极大连通子图
1. 如果有n个顶点,边数<n-1,则此图非连通图
2. 全部顶点的度的和 = 边数的2倍
3. 有n个顶点,并且有 >n-1条边,则图一定有环
4. 边数取值范围从0到n(n-1)/2
5. 边数为n(n-1)/2时,叫完全图
6. 顶点数为n,则它的生成树含有n-1条边
-连通图的生成树是包含全部顶点的一个极小连通子图
7. 保证无向图连通最少边数 = (n-1)(n-2)/2+1 n为顶点数
8. 非连通无向图的边数 = n(n-1)/2+1-任意顶点的入度 = 出度
9. 无向连通图边数至少为 = n-1
1. 边数的取值范围为 0~n(n-1)
- 强连通:v->w有双向路径
- 强连通图:任何一对顶点都是强连通的
2. 强连通最少边数2(n-1)
二.图的邻接表定义
2.1.图的邻接矩阵存储
#define Maxsize 500
struct Graph{
int numVertex;
int numEdge;
int edge[Maxsize][Maxsize];
}typedef struct G;
2.2.图的邻接表存储
/*-----------边的定义-------------*/
typedef struct ENode *PtrToENode;
struct ENode{
Vertex V1,V2;//有向边<V1,V2>
WeightType Weight; //权值
};
typedef PtrToENode Edge;
/*-----------邻接点的定义-------------*/
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{
Vertex AdjV;//邻接点下标
WeightType Weight;//边的权值
PtrToAdjVNode Next;//指向下一个邻接点
};
/*-----------顶点表头结点的定义-------------*/
typedef struct VNode{
PtrToAdjVNode FirstEdge;//边表头指针
DataType Data;//存顶点的数据
}AdjList[MaxVertexNum];//AdjList是邻接表类型
/*-----------图结点的定义-------------*/
typedef struct GNode *PtrToGNode;
struct GNode{
int Nv;//顶点数
int Ne;//边数
AdjList G;//邻接表
};
typedef PtrToGNode LGraph;
三.图的应用:最小生成树(MST)