图中的最小生成树——Prim算法
2017-10-30 16:09
197 查看
最小生树
在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。接下来以例子说明:
忽略动态效果,这里只关注节点的连接关系。
Prim算法C++实现
#include<bits/stdc++.h> using namespace std; const int maxn=50; const int INF=10000; int G[maxn][maxn]; int vsit[maxn]; int cost[maxn]; void prim (int v,int n){ vsit[v]=1; int sum=0,k; cout<<"V"<<v<<", sum=0"<<endl; for(int i=1;i<n;i++){ cost[i]=G[v][i]; } for(int i=1;i<n-1;i++){ int min=INF+1; for(int j=1;j<n;j++){ if(!vsit[j]&&cost[j]<min){ min=cost[j]; k=j; } } vsit[k]=1; cout<<"V"<<k<<", sum="; sum+=cost[k]; cout<<sum<<endl; for(int i=1;i<n;i++){ if(!vsit[i]&&G[k][i]<cost[i]){ cost[i]=G[k][i]; } } } } void kruskal(int v,int n){ } int main(){ memset(G,INF,sizeof(G)); G[1][6]=14;G[1][2]=7;G[1][3]=9; G[2][3]=10;G[2][4]=15;G[2][1]=7; G[3][1]=9;G[3][2]=10;G[3][6]=2;G[3][4]=11; G[4][3]=11;G[4][2]=15;G[4][5]=6; G[5][4]=6;G[5][6]=9; G[6][5]=9;G[6][3]=2;G[6][1]=14; int n=7; // cout<<"table of Graph:"<<endl; // for(int i=1;i<n;i++){ // for(int j=1;j<n;j++) // printf("%2d ",G[i][j]); // cout<<endl; // } memset(vsit,0,sizeof(vsit)); prim(1,n); return 0; }
相关文章推荐
- prim算法 最小生成树MST
- hihoCoder - hiho一下 第二十六周 - A - 最小生成树一·Prim算法
- 最小生成树-Prim算法和Kruskal算法
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- 数据结构 — 图 之 MST(最小生成树 — prim算法 )
- hdu 畅通工程再续(最小生成树)(Prim算法 && Kruskal算法)
- 最小生成树——Prim算法
- 最小生成树prim算法实现
- 最小生成树prim算法适合稠密图(网络整理)8.12
- 图论入门,Prim算法求最小生成树代价,HDOJ 1879 继续畅通工程
- 数据结构--图的最小生成树Prim算法
- 最小生成树算法(一)--对prim算法的理解
- 【算法导论】最小生成树(prim算法)
- 图的最小生成树——Prim算法
- 数据结构与算法--最小生成树之Prim算法
- 最小生成树-Prim算法和Kruskal算法
- 图论算法----最小生成树Prim算法详解
- 最小生成树MST - Prim算法 和 Kriskal算法
- 最小生成树的Prim算法
- Prim算法和Kruskal算法求最小生成树