最小生成树算法(两个方法实现)
生活随笔
收集整理的這篇文章主要介紹了
最小生成树算法(两个方法实现)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
何為最小生成樹算法呢?(記得前提是該數是無向樹)(在保證一個圖連通的情況下,權值最小的邊的集合)
科普一下圖的相關定義:
關于圖的幾個概念定義:
- 連通圖:在無向圖中,若任意兩個頂點vivi與vjvj都有路徑相通,則稱該無向圖為連通圖。
- 強連通圖:在有向圖中,若任意兩個頂點vivi與vjvj都有路徑相通,則稱該有向圖為強連通圖。
- 連通網:在連通圖中,若圖的邊具有一定的意義,每一條邊都對應著一個數,稱為權;權代表著連接連個頂點的代價,稱這種連通圖叫做連通網。
- 生成樹:一個連通圖的生成樹是指一個連通子圖,它含有圖中全部n個頂點,但只有足以構成一棵樹的n-1條邊。一顆有n個頂點的生成樹有且僅有n-1條邊,如果生成樹中再添加一條邊,則必定成環。
- 最小生成樹:在連通網的所有生成樹中,所有邊的代價和最小的生成樹,稱為最小生成樹。?
(總結一下就是,既要遍歷所有的點,又要使經過的點權值之和最小)
下面介紹兩個常用的算法:
K算法和P算法:
先介紹K算法:(按照小權值的邊開始考察)
基本思想:
從小權重的邊開始考查,選了之后如果沒有形成回路就要它,如果形成回路就不要它了,直至所有的點都被包括了~
技術實現:使用并查集來檢查有沒有回路
使用堆棧來建立優先級隊列。
流程圖實現如下:
程序源碼如下:
參考博文:https://blog.csdn.net/luoshixian099/article/details/51908175
總結
以上是生活随笔為你收集整理的最小生成树算法(两个方法实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot——@Config
- 下一篇: Mybatis Plus————代码生成