数据结构c语言——有关图的遍历、图的算法、最小生成树

从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为 图的遍历

图的遍历得到的顶点序列称为图遍历序列。

图的遍历算法有深度优先搜索算法和广度优先搜索算法。

深度优先搜索(Depth First Search–DFS)遍历类似树的先序遍历,是树的先序遍历的推广。

深度优先搜索算法思想:

设初始状态时图中的所有顶点未被访问,则:
⑴ :从图中某个顶点vi出发,访问vi;然后找到vi的一个邻接顶点vi1 ;
⑵:从vi1出发,深度优先搜索访问和vi1相邻接且未被访问的所有顶点;
⑶:转⑴ ,直到和vi相邻接的所有顶点都被访问为止
⑷ :继续选取图中未被访问顶点vj作为起始顶点,转(1),直到图中所有顶点都被访问为止。在这里插入图片描述

广度优先搜索算法思想:

算法思想:

设初始状态时图中的所有顶点未被访问,则:
⑴ :从图中某个顶点vi出发,访问vi;
⑵:访问vi的所有相邻接且未被访问的所有顶点vi1,vi2,…,vim;
⑶:以vi1,vi2, …,vim的次序,以vij(1≦j≦m)依此作为vi ,转⑴;
⑷ :继续选取图中未被访问顶点vk作为起始顶点,转⑴,直到图中所有顶点都被访问为止。

在这里插入图片描述
生成树一定是连通的,一定是连通的生成子图这句话是对的
但是,连通的生成子图一定是生成树就是错的
一个图可以有多个生成树,有n个顶点的生成树的最少的边是n-1个

最小生成树:

生成树、生成森林:一个连通图(无向图)的生成树是一个极小连通子图,它含有图中全部n个顶点和只有足以构成一棵树的n-1条边,称为 图的生成树
关于无向图的生成树的几个结论:
◆ 一棵有n个顶点的生成树有且仅有n-1条边;
◆ 如果一个图有n个顶点和小于n-1条边,则是非连通图;
◆如果多于n-1条边,则一定有环;
◆有n-1条边的图不一定是生成树。

一个连通图的生成树是一个极小连通子图,它含有图中全部n个顶点和构成一棵树的(n-1)条边。  
在这里插入图片描述
命题:如果在一棵生成树上添加一条边,必定构成一个环。
由深度优先遍历得到的生成树称为深度优先生成树
由广度优先遍历得到的生成树称为广度优先生成树
连通图:

仅需调用遍历过程(DFS或BFS)一次,从图中任一顶点出发,便可以遍历图中的各个顶点,产生相应的生成树。 
非连通图:

需多次调用遍历过程。每个连通分量中的顶点集和遍历时走过的边一起构成一棵生成树。所有连通分量的生成树组成非连通图的生成森林。
带权连通图:

对于带权连通图G (每条边上的权均为大于零的实数),可能有多棵不同生成树。
每棵生成树的所有边的权值之和可能不同。
其中权值之和最小的生成树称为图的最小生成树。

最小生成树有两种算法,即 普里姆算法(Prim)克鲁斯卡尔算法(Kruskal)
在这里插入图片描述
普里姆算法(Prim):先选一个顶点作为起点,然后再根据权值进行连接(小的优先),将连接好的作为一个整体,重复按照权值信息进行连接(不能出现环)。
对于普里姆算法,给出例题:
在这里插入图片描述
从A开始
在这里插入图片描述
在这里插入图片描述
克鲁斯卡尔算法(Kruskal):找两个权值最小的边画出,保证每个顶点只能构成一条边。

注意:遍历时不看权值,最小生成树或最短路径或关键路径时才看权值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值