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 邻接矩阵
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define max_vernum 100
#define infinity 0XFFFFFFFF
typedef struct mgraph
{
};
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网与关键路径