算法笔记6-有向图

有向图

它的边都是单向的。每条边连接的顶点都是有序对。

顶点的出度:以顶点v为弧尾的弧的数目。

顶点的入度:以顶点v为弧头的弧的数目。

顶点的度= 出度+入度

路径:非带权路径长度,指此路径上边的条数。带权路径是指,各边的权之和

简单路径:路径上各个顶点均不互相重复。

简单回路:若路径上第一个顶点和最后一个顶点重复,则称这样的路径为回路或者环

连通图和连通分量:是无向图的概念,若从顶点v1到v2有路径,则称v1与v2是连通的。。 如果图中任意一对顶点都是连通的,则称此图为连通图。。。 非连通图的极大连通子图,叫做连通分量

强连通图和强连通分量:是有向图的概念,若对于每一个对顶点Vn和Vm,都存在一条从Vn到Vm,和Vm到Vn的路径,则称此图是强连通图。

非强连通图的极大强连通子图,叫做强连通分量。

生成树:一个连通图有n个顶点和e条边,其中n-1条边和n个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树。

有向图的邻接表和逆邻接表:

 

带权的图

网络的邻接矩阵,在V*V的矩阵中,如果V1顶点指向V2顶点,那么[1,2]存放权值,如果V2没有指向V1,[2,1]写入无穷。


网络的邻接表,增加一个存储,存放权值


有向无环图:

是有向图的一种,就是图中没有环。常被用来表示事件之间的驱动依赖关系,管理任务之间的调度。

图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图

拓扑排序是对有向无环图的顶点进行排序。有有向无环图才有拓扑排序

通常一个有向无环图可以有一个或者多个拓扑排序序列

实现由两种算法:入度表、DFS

入度表,1.找出图中入度为0的顶点。 2.依次在图中删除这些顶点,删除后再找度为0的顶点  3.知道删除所有顶点,完成拓扑排序

DFS,顶点必须比其邻接点先出现。

我们打印一个顶点,然后递归深度优先搜索,其相邻的顶点。一直递归下去,知道DFS结束,那就意味着,这个节点是最后一个节点。没有下一个节点所指。将最后的节点,放入栈中,一次递归结束,运行上一层递归,将上一个顶点,放入栈中(此操作在递归方法最后)。。最后再打印内容。


最小生成树:

使用不同的遍历方法,可以得到不同的生成树。从不同的顶点出发也可以得到不同的生成树。

准则:

1.必须使用且仅使用该网络中的n-1条边,来连接网络中的n个顶点

2.不能使用产生回路的边

3.各边上的权值的总和达到最小

Prim算法:

在加权连通图里搜索最小生成树,的算法。

基本思想,从连通网络中,某一个顶点u出发,选择与它关联的具有最小权值(关联多条边,边上的数字最小的那一条)的边。将其顶点加入到生成树顶点集合U中(路径)。直到所有顶点都被该路径,经过。


代码表示:我们声明一个lowcost数组,表示当前选中顶点,与所有边的权值。(如果没有两个顶点没有直接相连,则*,无通路)

声明mst数组,表示选中的顶点能够与谁相连。

比如上图,选中0,则lowcost[0]=0,lowcost[1]=28,lowcost[2]=*,lowcost[5]=10...等等

此处因为是起点所以所有默认为0,也就是mst[2]=0,mst[3]=0....

可以看出最小权值是10,那么边

<mst[5],5> = 1 加入到mst数组 可能看不太懂,那么就是mst数组的<0,5> 设置为1 。 mst[5], 就是0咯。

Kruskal算法:

基于贪心算法思想得到的。首先我们把所有边按权值大小排列。接着按照顺序选取每条边。如果选择的边,的两个端点不属于同一个集合。那么将两个端点并入集合。

也就是每次都选最小的边,然后选择端点。


根据图我们可以知道:AD=5 , CE =5,DF = 6 ....

将所有边排序。

我们发现ad,ce都不在一棵树上,所以都被选中。接下来是df , ab , be ,eg




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值