連通,但不成環
邊的代價和最小貪心思想+並查集(檢查是否成環)
用邊權按從小到大排序初始化並查集
迴圈加邊,檢查是否成環 (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...