#include < iostream .h > const int n=3; //图的顶点数,应由用户定义typedef int adjmatrix[n][n]; //用二维数组作为邻接矩陈表示typedef struct{ //生成树的边结点 int fromvex,endvex; //边的起点与终点 int weight; //边上的权}TreeEdgeNode;typedef TreeEdgeNode edgeset[n-1]; //最小生成树定义void Prim(adjmatrix GA,edgeset &CT ,int n)//注意这里的参数CT是写成edgeset CT还是edgeset &CT 呢,经过实践发现,两种写法都是可以的,我想这应该是因为我们这里定义的edgeset[n-1]是全局变量的缘故。//利用普里姆算法从顶点v0出发求出用邻接矩阵GA表示的图的最小生成树,//最小生成树的边集存于数组CT中{ //给CT赋初值。 int i,j,k,min,t,m,w; for(i=0;i < n-1 ;i++) { CT[i].fromvex =0; CT[i].endvex =i+1; CT[i].weight =GA[0][i+1]; } //进行n-1循环,每次求出最小生成树中的第k条边 for(k =1;k<n;k++) { //从CT[k-1]至CT[n-1]中查找最短边CT[m] min =CT[k-1].weight;//先假设CT[k-1]为最短边 m =k-1; for(j =k;j<n-1;j++) if(CT[j].weight<min) { min =CT[j].weight; m =j; } //把最短边调到k-1下标的位置 TreeEdgeNode temp =CT[k-1]; CT[k-1] =CT[m]; CT[m] =temp; //把新并入最小生成树T中的顶点的顶点序号赋值给j j =CT[k-1].endvex; //修改LW中的有关边,使T中到T外的每一个顶点各保持一条到目前为止最短边 for(i =k;i<n-1;i++) { t =CT[i].endvex; w =GA[j][t]; if(w<CT[i].weight) { CT[i].weight =w; CT[i].fromvex =j; } } }}void main(){ int i,j; adjmatrix adj;//注意:adjmatrix[n][n]是自定义数据类型 edgeset CT;//注意:edgeset[n-1]是自定义数据类型 cout<<"请输入图的邻接矩陈阵"<<endl; for(i =0;i<n;i++) for(j =0;j<n;j++) { cin > >adj[i][j]; } Prim(adj,CT,n);//注意参数的传递方法,自定义数据类型就像系统定义的一样,如 int a,传参跟这个一样。 cout < <"最小生成树的边集如下: "<<endl; for(i =0;i<n-1;i++) cout<<"起点:"<<CT[i].fromvex<<" "<<"终点:"<<CT[i].endvex<<" "<<"权值:"<<CT[i].weight<<endl; }/*测度用例一(先把n设为7)//提示,在DOS中点出鼠标右键就可以把这些测试数据一次性粘贴上去。请输入图的邻接矩陈阵0 8 100 5 100 100 1008 0 12 3 10 100 100100 12 0 100 6 2 1005 3 100 0 100 7 15100 10 6 100 0 9 100100 100 2 7 9 0 100100 100 100 15 100 100 0最小生成树的边集如下:起点:0 终点:3 权值:5起点:3 终点:1 权值:3起点:3 终点:5 权值:7起点:5 终点:2 权值:2起点:2 终点:4 权值:6起点:3 终点:6 权值:15Press any key to continue测度用例二(先把n设为3)请输入图的邻接矩陈阵0 100 3100 0 43 4 0最小生成树的边集如下:起点:0 终点:2 权值:3起点:2 终点:1 权值:4Press any key to continue测度用例三(先把n设为3)请输入图的邻接矩陈阵0 5 35 0 43 4 0最小生成树的边集如下:起点:0 终点:2 权值:3起点:2 终点:1 权值:4Press any key to continue*//*http://f2.9612.org//vcpp/webinfo/WebInfoBata1.aspQQ群:34409541 讨论网页 34409326 讨论JAVA 已满 34408784 讨论VC++ 34409699 讨论VC++ 9143041 讨论MFC编程 10614204 讨论C# 10613030 讨论Win32编程 10613067 讨论游戏开发 18779860 讨论JAVA */