Prim 演算法 最小生成樹 圖
阿新 • • 發佈:2019-01-08
Prim 演算法
#include<iostream> #include<cstdio> using namespace std; //Prinm構造最小生成樹演算法 /* 演算法採用鄰接矩陣的方法儲存 圖 以下為圖的領接矩陣表 0 6 1 5 32767 32767 6 0 5 32767 3 32767 1 5 0 5 6 4 5 32767 5 0 32767 2 32767 3 6 32767 0 6 32767 32767 4 2 6 0 */ #define INF 32767 #define MAXV 100 typedef struct { int edges[7][7]; int n;//節點數 int v;//邊數 }MGraph; void prim(MGraph g,int v){ int lowcost[50]; int closest[50]; int min,i,j,k; for(i=0;i<g.n;i++){ lowcost[i]=g.edges[v][i]; closest[i]=v; } for(i=0;i<g.n;i++){ min=32767; for(j=0;j<g.n;j++){ if(lowcost[j]!=0&&lowcost[j]<min){ min=lowcost[j]; k=j; } } printf("邊(%d,%d)權為:%d\n",closest[k],k,min); lowcost[k]=0;//標記k已加入佇列U for(j=0;j<g.n;j++){ if(g.edges[k][j]!=0&&g.edges[k][j]<lowcost[j]) lowcost[j]=g.edges[k][j]; closest[j]=k; } } } int main(){ int gn ,edx; cin>>gn; MGraph g; for(int i=0;i<gn;i++){ for(int j=0;j<gn;j++){ cin>>g.edges[i][j]; } } g.n=6; g.v=10; prim(g,0); return 0; }