prim算法实现

来源:互联网 发布:淘宝总发短信怎么取消 编辑:程序博客网 时间:2024/06/09 20:54


</pre><pre>

#include<iostream>using namespace std;#define max 100#define maxcost 10000int graph[7][7];   //图 int prim(int graph[][7],int n){int lowcost[max];  ////记录以i为终点的边的最小权值,0表示 i 已加入树int mst[max];int i,j,min,minid,sum=0; for(i=2;i<=n;i++) { lowcost[i]=graph[1][i];  //最短距离初始化为其他节点到1号节点的距离  mst[i]=1;              //标记所有节点的起点为第一个节点  } mst[1]=0;  //1号节点加入生成树 cout<<"the prim is "<<endl; for(i=2;i<=n;i++) { min=maxcost; minid=0; for(j=2;j<=n;j++) { if(lowcost[j]<min&&lowcost[j]!=0) { min=lowcost[j];    //找权值最小的边,同时排除已标记的顶点  minid=j; }  }  cout<<mst[minid]<<" yu "<<minid<<" lian "<<min;  //遍历与第一个节点相连的所有节点后,找到第二个节点   cout<<endl;  sum+=min;  lowcost[minid]=0;   //第二个节点已加入,标记   for(j=2;j<=n;j++)    //加入第二个节点后,迭代   {  if(graph[minid][j]<lowcost[j])  {  lowcost[j]=graph[minid][j];  mst[j]=minid;  }  } } return sum;  }int main(){int m=6,n=10,i,j,k;   ////7个顶点,11条边    int cost;    for(i=1;i<=m;i++)        for(j=1;j<=m;j++)            {   graph[i][j]=maxcost;            }     graph[1][2]=10;     graph[1][4]=30;     graph[1][5]=45;     graph[2][1]=10;     graph[2][3]=50;     graph[2][5]=40;     graph[2][6]=25;     graph[3][2]=50;     graph[3][5]=35;     graph[3][6]=15;     graph[4][1]=30;     graph[4][6]=20;     graph[5][1]=45;     graph[5][2]=40;     graph[5][3]=35;     graph[5][6]=55; graph[6][2]=25; graph[6][3]=15; graph[6][4]=20; graph[6][5]=55; cost=prim(graph,m); cout<<"the prim cost is: "<<cost<<endl; return 0;}


运行结果:



0 0
原创粉丝点击