最小生成树(普里姆)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define OK 1
 4 #define TRUE 1
 5 #define FALSE 0
 6 #define ERROR -1
 7 #define OVERFLOW -2
 8 #define INFINITY 65535 
 9 #define MAX_VERTEX_NUM 20
10 typedef int Status;
11 typedef char TreeType;
12 //定义邻接矩阵数据结构 
13 typedef struct
14 {
15     TreeType vexs[MAX_VERTEX_NUM];
16     int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
17     int vexnum,arcnum;
18 }MGraph;
19 Status CreateMGraph(MGraph &G)//构造一个图型存储结构 
20 {
21     int i,j,k;
22     puts("请输入构成图的顶点个数和边数:"); 
23     scanf("%d%d%*c",&G.vexnum,&G.arcnum);
24     puts("请输入顶点数值:"); 
25     for(i=0;i<G.vexnum;i++)
26        scanf("%c",&G.vexs[i]);
27     for(i=0;i<G.vexnum;i++)
28         for(j=0;j<G.vexnum;j++)
29         if(i==j) G.arcs[i][j]=0;
30         else G.arcs[i][j]=INFINITY;
31     puts("请依次输入边(Vi,Vj)的顶点序号及权值:");
32     for(k=0;k<G.arcnum;k++)
33     {
34         scanf("%d%d",&i,&j);
35         scanf("%d",&G.arcs[i][j]);
36         G.arcs[j][i]=G.arcs[i][j];
37     }
38     return OK;
39 }
40 Status MiniSpanTree_Prim(MGraph G)
41 {
42     int min,i,j,k,minLength;
43     int adjvex[MAX_VERTEX_NUM],lowcost[MAX_VERTEX_NUM];
44     lowcost[0]=adjvex[0]=minLength=0;
45     for(i=1;i<G.vexnum;i++)
46     {
47         lowcost[i]=G.arcs[0][i];
48         adjvex[i]=0;
49     }
50     puts("最小生成树为:");
51     for(i=1;i<G.vexnum;i++)
52     {
53         min=INFINITY;
54         for(j=1,k=0;j<G.vexnum;j++)
55         if(lowcost[j]&&lowcost[j]<min)
56         {
57             min=lowcost[j];
58             k=j;
59         }
60         minLength+=G.arcs[adjvex[k]][k];
61         printf("(%d,%d) ",adjvex[k],k);
62         for(lowcost[k]=0,j=1;j<G.vexnum;j++)
63         if(lowcost[j]&&G.arcs[k][j]<lowcost[j])
64         {
65             lowcost[j]=G.arcs[k][j];
66             adjvex[j]=k;
67         }
68     }
69     printf("\n最小生成树的长度为:\n%d\n",minLength);
70     return OK;
71 }
72 Status main()
73 {
74     MGraph G;
75     CreateMGraph(G);
76     MiniSpanTree_Prim(G); 
77     system("pause");
78     return OK; 
79 }

posted on 2012-08-03 09:20  mycapple  阅读(288)  评论(0)    收藏  举报

导航