Kruskal Prim最小生成樹

2021-08-15 04:35:44 字數 1159 閱讀 1152

連通,但不成環

邊的代價和最小

貪心思想+並查集(檢查是否成環)

用邊權按從小到大排序初始化並查集

迴圈加邊,檢查是否成環 (n-1條

運用了,貪心思想

貪心:一種結果很準確,但是佔的空間很大很大。

所以我們這次要用這種很好的方法來做。

prim演算法跟dij和bellman-演算法一樣。初始化

對於flag操作的問題:

memset(flag,true,sizeof flag);

解釋:

把flag全部填為真(true)

對於f

for (int i=1;i<=n;++i) f[i]=0x7fffffff; f[1]=0;

注意哦,這裡不能用memset,那樣會卡爆!!

解釋:
如果呢?到了

對於map

memset(map,0,sizeof map);

2.迴圈

for (int i=1;i<=n-1;++i)

}//2.標記v

flag[v]=false;

//3.更新v發出的邊

for (int j=1;j<=n;++j)

memset(flag,true,sizeof flag);

for (int i=1;i<=n;++i) f[i]=0x7fffffff; f[1]=0;

for (int i=1;i<=n-1;++i)

//更新我的指令//}

//2.標記v

flag[v]=false;

//3.更新v發出的邊

for (int j=1;j<=n;++j)}}

int ans=0;

for (int i=1;i<=n;++i) ans+=f[i];

printf("%d",ans);

return 0;

}

最小生成樹(Kruskal Prim) 模板

1 假設以下情景,有一塊木板,板上釘上了一些釘子,這些釘子可以由一些細繩連線起來。假設每個釘子可以通過一根或者多根細繩連線起來,那麼一定存在這樣的情況,即用最少的細繩把所有釘子連線起來。2 更為實際的情景是這樣的情況,在某地分布著n個村莊,現在需要在n個村莊之間修路,每個村莊之前的距離不同,問怎麼修...

最小生成樹演算法總結 Kruskal,Prim

今天覆習最小生成樹演算法。最小生成樹指的是在乙個圖中選擇n 1條邊將所有n個頂點連起來,且n 1條邊的權值之和最小。形象一點說就是找出一條路線遍歷完所有點,不能形成迴路且總路程最短。kurskal演算法的核心思想是將邊按權值排序,每次選出權值最小的邊,只要不會形成迴路就加入結果集,如果形成了迴路就不...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...