Prim算法求最小生成树
2012-05-17 23:09
239 查看
作者:silence、2012年5月17日
本文参考:Google,数据结构(C语言)
本人声明:个人原创,转载请注明出处。
本文参考:Google,数据结构(C语言)
本人声明:个人原创,转载请注明出处。
prim算法,求最小生成树 #include <cstdlib> #include <iostream> /* 最小生成树prim */ #define Max 65535 using namespace std; struct Graph { int arrArc[200][200]; int verCount; int arcCount; } ; int prim(Graph *g) { int sum = 0; int flag[200];//表示n是否加入S集合 int dis[200];//表示n到源点的最近距离 for(int i = 0;i<g->verCount;i++) { dis[i] = g->arrArc[0][i]; flag[i] = 0; } flag[0] = 1; //将0号结点加入集合S int count = 0; while(count++< g->verCount-1){//余下的点 int min = Max; int select; for(int i = 0;i<g->verCount;i++) { if((flag[i]==0)&&(min>dis[i])) { min = dis[i]; select = i; } } sum+=min; flag[select] = 1; for(int i = 0;i<g->verCount;i++) { if((flag[i]==0)&&(g->arrArc[select][i]<dis[i])) { dis[i] = g->arrArc[select][i]; } } } return sum; } int main(int argc, char *argv[]) { Graph g; cout<<"input the ver and arc"<<endl; cin>>g.verCount>>g.arcCount; for(int i = 0;i<g.verCount;i++) for(int j =0 ;j<g.verCount;j++) { if(i==j) g.arrArc[i][i]=0; else g.arrArc[i][j] = Max; } char a,b; int dis; cout<<"input the arrArc"<<endl; for(int k = 0;k<g.arcCount;k++) { cin>>a>>b>>dis; int i = a - 'A'; int j = b - 'A'; g.arrArc[i][j] = dis; g.arrArc[j][i] = dis; } cout<<"the min value is "<<prim(&g)<<endl; system("PAUSE"); return EXIT_SUCCESS; } /* 输入 7 11 A B 7 A D 5 B C 8 B D 9 B E 7 C E 5 D E 15 D F 6 E F 8 E G 9 F G 11 输出 39 无向加权图中,n个顶点的最小生成树有n-1条边,这些边使得n个顶点之间可达,且总的代价最小。 prim算法是一种贪心算法,将全部的顶点划分为2个集合,每次总在2个集合之间中找最小的一条边,局部最优最终达到全局最优,这正是贪心的思想 */
相关文章推荐
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- hdu 畅通工程再续(最小生成树)(Prim算法 && Kruskal算法)
- 最小生成树prim算法适合稠密图(网络整理)8.12
- 最小生成树--Prim算法和Kruskal算法
- 最小生成树:Prim算法C++
- 最小生成树(Prim算法和Kruskal算法)
- 最小生成树算法(一)--对prim算法的理解
- prim算法模板—最小生成树
- 最小生成树(MST)——Prim算法
- 最小生成树之prim算法
- 最小生成树(prim算法)
- 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
- 图的最小生成树——Prim算法
- 最小生成树 prim算法
- 转 最小生成树(kruskal 算法 和prim算法)
- 最小生成树PRIM算法
- prim算法查找最小生成树
- 最小生成树之prim算法概念与实现
- #1097 : 最小生成树一·Prim算法
- HDU 1233-还是畅通工程(经典的最小生成树, Kruskal和prim算法)