1. 图
图是由非空的顶点集合V和描述顶点间联系的弧(或边)的集合E组成的二元组,既G=(V,E)
有向图 :V={vi} ; E={<vi,vj>} , vi->vj
无向图 :V={vi} ; E=(<vi,vj>) , vi - j
n 表示顶点数,e 表示边或弧的数目
无向图:
e 的取值范围 0 ~ n(n-1)/2
有向完全图:e = n(n-1)/2
有向图:
e 的取值范围 0 ~ n(n-1)
无向完全图:e = n(n-1)
稀疏图、稠密图
权:从一个顶点到一个顶点的权值
网:带权图
有向网、无向网
子图:G=(V,E) , G'=(V',E'),若V'属于V,E'属于E,则称G'为G的子图
顶点的度:依附于该顶点的边的数目,记作 TD(V)
e = ∑TD(Vi)/2
有向图: 入度 ID(V) 以顶点为终点的边数
出度 OD(V) 以顶点为起点的边数
路径:从一个顶点到另一个顶点的边或弧的集合
路径长度:边或弧的数目
简单路径:不出现重复顶点
简单回路/环:第一个顶点和最后一个顶点相同
连通:无向图如果从一个顶点Vi到另一个顶点Vj有路径,则称Vi和Vj是连通的
连通图:无向图中任意两个顶点都是连通的
连通分量:无向图的极大连通子图
强连通图:有向图中,任意两个顶点Vi、Vj,从Vi到Vj和从Vj到Vi都存在路径,则称有向图为强连通图
强连通分量:有向图的极大强连通子图
极小连通子图:一个连通图的生成树是该图的一个极小连通子图,图中包含全部的n个顶点和连通这n个顶点的n-1条边
非连通图中,每个连通分量都可以得到一个极小连通子图(生成树),这些连通分量的生成树构成了该非连通图的生成森林
2. 图与网的存储结构
2.1 邻接矩阵
/*
邻接矩阵
用一维数组存储图或网的顶点信息,用二维数组表示顶点之间的邻接关系
假设有n个顶点,则邻接矩阵A是n阶方阵
无向图\有向图:A[i][j] = 1, (vi,vj)\<vi,vj> 属于 E
0, (vi,vj)\<vi,vj> 不属于 E
无向网\有向网:A[i][j] = Wij, (vi,vj)\<vi,vj> 属于 E
无穷大, (vi,vj)\<vi,vj> 不属于 E
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define max_vernum 100
#define infinity 0XFFFFFFFF // 无穷大
typedef struct mgraph
{
/* data */
};
int main()
{
return 0;
}
2.2 邻接表与逆邻接表
2.3 邻接多重表
3. 图的遍历
3.1 深度优先遍历搜索
3.2 广度优先遍历搜索
4. 无向联通图的最小生成树
4.1 Prim算法
4.2 kruskal算法
5. 有向图的最短路径
5.1 单源最短路径
5.2 所有顶点之间的最短路径
6. 有向无环图
6.1 AOV网与拓扑排序
6.2 AOE网与关键路径