图的课件详细,结合看
目录
4.1.1总结无向图、有向图的结点数、边数、度数、连通性、强连通性等性质之间的关系
4.2.3自己设计一个不少于6个结点的带权无向图,并画出其邻接矩阵、邻接表的样子
4.2.4自己设计一个不少于6个结点的带权有向图,并画出其邻接矩阵、邻接表的样子
4.3.1自己设计一个不少于6个结点的带权无向连通图,并画出其邻接矩阵、邻接表的样子
4.3.2基于上述无向连通图,使用Prim算法生成MST,画出算法执行过程的示意图,并计算MST的总代价
4.3.3基于上述无向连通图,使用Kruskal算法生成MST,画出算法执行过程的示意图,并计算MST的总代价
4.4.1基于你设计的带权有向图,从某一结点出发,执行Dijkstra算法求单源最短路径。用文字描述每一轮执行的过程
4.5.1自己设计一个不少于6个结点的带权有向无环图,并画出其邻接矩阵的样子
4.5.2用一维数组将你设计的有向无环图的邻接矩阵进行压缩存储
4.5.3文字描述:基于你压缩存储的数组,如何判断结点 i、j 之间是否有边?
4.5.4基于你设计的带权有向无环图,写出所有合法的拓扑排序序列
基于你设计的带权有向无环图,写出所有合法的关键路径,并算出关键路径总长度
图的性质
4.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. 强连通最少边数
图的数据结构定义
4.2.1写代码:定义一个顺序存储的图(邻接矩阵实现)
#define MaxVertexNum 100 //顶点数目的最大值
typedef char VertexType; //顶点的数据类型
typedef int EdgeType; //带权图中边上权值的数据类型
typedef struct{
VertexType Vex[MaxVertexNum]; //顶点表,用来存储顶点
EdgeType Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵,边表,用来存储边
int vexnum, arcnum; //图的当前顶点数和弧数
}MGraph;
4.2.2写代码:定义一个链式存储的图(邻接表实现)
#define MaxVertexNum 100 //顶点数目的最大值
typedef struct ArcNode{ //边表结点
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *next; //指向下一条弧的指针
}ArcNode;
typedef struct VNode{ //顶点表结点
VertexType data; //顶点信息
ArcNode *first; //指向第一条依附该顶点的弧的指针
}VNode, AdjList[MaxVertexNum];
typedef struct{
AdjList vertices; //邻接表
int vexnum, arcnum; //图的顶点数和弧数
}ALGraph; //ALGraph是以邻接表存储的图类型
4.2.3自己设计一个不少于6个结点的带权无向图,并画出其邻接矩阵、邻接表的样子
4.2.4自己设计一个不少于6个结点的带权有向图,并画出其邻接矩阵、邻接表的样子
图的应用:最小生成树(MST)
4.3.1自己设计一个不少于6个结点的带权无向连通图,并画出其邻接矩阵、邻接表的样子
4.3.2基于上述无向连通图,使用Prim算法生成MST,画出算法执行过程的示意图,并计算MST的总代价
4.3.3基于上述无向连通图,使用Kruskal算法生成MST,画出算法执行过程的示意图,并计算MST的总代价
图的应用:最短路径
4.4.1基于你设计的带权有向图,从某一结点出发,执行Dijkstra算法求单源最短路径。用文字描述每一轮执行的过程
4.4.2文字描述:用BFS算法求单源最短路径的过程
图的应用:拓扑排序
4.5.1自己设计一个不少于6个结点的带权有向无环图,并画出其邻接矩阵的样子
4.5.2用一维数组将你设计的有向无环图的邻接矩阵进行压缩存储
4.5.3文字描述:基于你压缩存储的数组,如何判断结点 i、j 之间是否有边?
【非∞元素是有边的】?不确定
4.5.4基于你设计的带权有向无环图,写出所有合法的拓扑排序序列
结点号 0 1 2 3 4 5 初始入度 0 1 2 1 1 2 第一轮 0 1 1 1 2 第二轮 0 1 1 2 第三轮 0 0 2 第四轮 0 1 第五轮 0 第六轮 拓扑排序结果为{0,1,2,3,4,5}
其中在第三轮时还可选择先删除结点4,得到的拓扑排序结果为{0,1,2,4,3,5}
4.5.5文字描述:拓扑排序的过程
图的应用:关键路径
基于你设计的带权有向无环图,写出所有合法的关键路径,并算出关键路径总长度