九度 1017

来源:互联网 发布:数据库数据如何查找 编辑:程序博客网 时间:2024/06/06 08:33

最小生成树


#include<cstdio>#include<memory.h>#define MAX 110#define MAXEDGE 1000000typedef struct Graph_{        int arcs[MAX][MAX];        int vexnum;        int arcnum;}Graph;typedef struct{        int adjvex;        int lowcost;}EdgeType;Graph G;EdgeType closegde[MAX];int sum;void prim();int minlowcost();int main(){        int n;        int a,b,cost;        while(scanf("%d",&n) && n)        {                memset(G.arcs,0,sizeof(G.arcs));                G.arcnum=n*(n-1)/2;                G.vexnum=n;                for(int i=0;i<G.arcnum;i++)                {                        scanf("%d%d%d",&a,&b,&cost);                        G.arcs[a][b]=G.arcs[b][a]=cost;                }                sum=0;                prim();                printf("%d\n",sum);        }        return 0;}void prim(){        int k;        for(int i=1;i<=G.vexnum;i++)        {                closegde[i].adjvex=1;                closegde[i].lowcost=G.arcs[1][i];        }        closegde[1].lowcost=0;        /*for(int i=1;i<=G.vexnum;i++)                printf("closedge:%d  ",closegde[i].lowcost);        printf("\n");*/        for(int i=1;i<G.vexnum;i++)        {                k=minlowcost();                //printf("%d  %d\n",closegde[k].adjvex,k);                sum+=closegde[k].lowcost;                closegde[k].lowcost=0;                for(int i=1;i<=G.vexnum;i++)                {                        if(G.arcs[k][i]<closegde[i].lowcost)                        {                                closegde[i].lowcost=G.arcs[k][i];                                closegde[i].adjvex=k;                        }                }        }}int minlowcost(){      int min_,i;      min_=MAXEDGE;      i=-1;      for(int j=1;j<=G.vexnum;j++)      {              if(closegde[j].lowcost!=0 && min_>closegde[j].lowcost)              {                      min_=closegde[j].lowcost;                      i=j;              }      }      return i;}

0 0