prim演算法模板 (最小生成樹)
阿新 • • 發佈:2019-02-03
求無向圖的最小生成樹的主要演算法有:prim演算法和Kruskal演算法
最小生成樹:prim演算法
最小生成樹:prim演算法
演算法的實現模板:(用這模板小心TLE....)
#define MIN 65535 #define MAX_Point 120 //最大頂點數 #define MAX_Edge 14400 //最大的邊數 int flag1 =0; double sum; double arr_list[MAX_Point][MAX_Point]; struct Edge { int point; double lowcost; int flag; }; Edge edge[MAX_Edge]; double prim(int n) { int i,j,k=1,flag; double min,sum2=0; j=1; for(i=1;i<=n;i++) { if(i!=j) { edge[i].point=i; edge[i].lowcost=arr_list[j][i]; edge[i].flag=0; } } edge[j].lowcost=0; edge[j].flag=1; for(i=2;i<=n;i++) { k=1; min=MIN; flag=0; for(j=2;j<=n;j++) { if(edge[j].flag==0 && edge[j].lowcost<min) { k=j; min=edge[j].lowcost; flag=1; } } if(!flag) return -1; sum2+=min; edge[k].flag=1; for(j=2;j<=n;j++) { if(edge[j].flag==0 && arr_list[k][j]<edge[j].lowcost) { edge[j].point=k; edge[j].lowcost=arr_list[k][j]; } } } return sum2; }