最小生成樹

關於圖的幾個概念定義:算法

  • 連通圖:在無向圖中,若任意兩個頂點vivivjvj都有路徑相通,則稱該無向圖爲連通圖。
  • 強連通圖:在有向圖中,若任意兩個頂點vivivjvj都有路徑相通,則稱該有向圖爲強連通圖。
  • 連通網:在連通圖中,若圖的邊具備必定的意義,每一條邊都對應着一個數,稱爲權;權表明着鏈接連個頂點的代價,稱這種連通圖叫作連通網。
  • 生成樹:一個連通圖的生成樹是指一個連通子圖,它含有圖中所有n個頂點,但只有足以構成一棵樹的n-1條邊。一顆有n個頂點的生成樹有且僅有n-1條邊,若是生成樹中再添加一條邊,則一定成環。
  • 最小生成樹:在連通網的全部生成樹中,全部邊的代價和最小的生成樹,稱爲最小生成樹。 
    這裏寫圖片描述

下面介紹兩種求最小生成樹算法app

1.Kruskal算法

G=(V,E),頂點數目共n個,令最小生成樹的初始狀態只有n個頂點無邊T=(V,TE),TE爲空集,每一個頂點自成一格連通份量。在E中選擇代價最小的邊,若該邊依賦的兩個頂點在T中不一樣連通份量上,則加入該邊到T中,不然捨去,選擇下一條代價最小的邊。直到僅有一個連通份量爲止。
spa


2.Prim算法

此算法能夠稱爲「加點法」,每次迭代選擇代價最小的邊對應的點,加入到最小生成樹中。算法從某一個頂點s開始,逐漸長大覆蓋整個連通網的全部頂點。orm

  1. 圖G=(V,E),T=(V,TE)是最小生成樹,U是最小生成樹所含的頂點集。
  2. 初始,任取一頂點u加入U,U={u},TE=空集。
  3. 重複操做:找出U與V-U之間的一條最小邊(u,v),將v加入U,U=U並{v},邊(u,v)加入TE,TE=TE並{(u,v)},直到V=U爲止。
  4. 最後獲得的T=(V,TE)就是G的一顆最小生成樹。