DS图的“应用”

图的课件详细,结合看 

目录

图的性质 

4.1.1总结无向图、有向图的结点数、边数、度数、连通性、强连通性等性质之间的关系

 图的数据结构定义

4.2.1写代码:定义一个顺序存储的图(邻接矩阵实现)

4.2.2写代码:定义一个链式存储的图(邻接表实现)

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基于你设计的带权有向无环图,写出所有合法的拓扑排序序列

4.5.5文字描述:拓扑排序的过程

图的应用:关键路径

基于你设计的带权有向无环图,写出所有合法的关键路径,并算出关键路径总长度

文字描述:关键路径总长度的现实意义是什么?


图的性质 

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基于你设计的带权有向无环图,写出所有合法的拓扑排序序列

结点号012345
初始入度012112
第一轮  01112
第二轮    0112
第三轮      002
第四轮    01
第五轮     0
第六轮      

拓扑排序结果为{0,1,2,3,4,5}

其中在第三轮时还可选择先删除结点4,得到的拓扑排序结果为{0,1,2,4,3,5}

4.5.5文字描述:拓扑排序的过程

 

图的应用:关键路径

基于你设计的带权有向无环图,写出所有合法的关键路径,并算出关键路径总长度

 

文字描述:关键路径总长度的现实意义是什么?

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值