系统分析师--图论

最小生成树

在连通的带权图的所有生成树种, 权值和最小的那棵生成树,称作为最小生成树。普里姆(Prim)算法和克鲁斯卡(Kruskal)算法

1. Prim

一个图中, 有N个点, 我们记做集合A, 这时候我们选一个点开始, 这个点a放到集合B中。

第一轮:与这个a点相连的所有点, 选择一个权值最小的点b,放入到B中, 

第二轮:选择与a或b相连的所有点(不包含a和b的连线),再选择一个权值最小的点c,放入到集合B中

第三轮:选择与a或b或c相连的所有点(不包含a b c之间互相连接的线), 选择一个权值最小的点d,放入到集合B中

第N轮: 选择与B集合中的点相连接的所有点(不包含集合B中互相连接的点), 选择一个权值最小的点n, 放入到集合B中

最终, 当着N个点,都划入到B中,结束。这个点的顺序和权值的关系,就是最小生成树

2. Kruskal

原理和prim有点像, 不过prim注重的是对点的处理, Kruskal注重的是对边的处理。

最短路径:

1.Dijkstra

一共N个点记做集合A, 我们从点a出发到点z,  选择里a最近的点b放到集合A中

集合是a->b   在找距离b最近的点c, 把c放到集合A中, 集合A中判断,a->c是否大于a->b->c,如果大于路径为a->c否则为a->b->c

继续查找距离c最近的点d, 把d放入到集合a中, 在集合A中找到a->d最短的距离,

反复查找,直到所有的N个点都在集合A中的时候, 算出的路径就是最短路径

2.Folyd

N个点记做集合A,做一个二维数组, 数组的每个元素A[i][j]记录i点到j点的距离。

求a 到b的距离, A[a][b] = 距离D

在加一个点x  A[a][x] + A[x][b]  最小 = 距离D1

依次多加一个点,  找出做小的距离Dn, 那个组合的点顺序就是 最短路径。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值