prim

来源:互联网 发布:服务器数据同步软件 编辑:程序博客网 时间:2024/05/20 02:23

点击打开链接

 # include<stdio.h># include<string.h>int a[505][505],flag[505],b[505];int prim(int v){    int i,j,k,s,min,p;    s=0;    for(i=1;i<v;i++)        {            min=1000;            for(j=1;j<=v;j++)          //对更新数据排序找出最小的            if(min>b[j]&&flag[j]==0)            {                 min=b[j];                 p=j;            }            s=s+min;            flag[p]=1;            for(k=1;k<=v;k++)            //更新数据            if(a[p][k]<b[k]&&flag[k]==0)            b[k]=a[p][k];        }        return s;}int main(){    int i,j,n,v,e,w,d,x,y,z,s,t;    scanf("%d",&n);    while(n--)    {        memset(flag,0,sizeof(flag));        memset(b,0,sizeof(b));        flag[1]=1;        w=1000;        scanf("%d%d",&v,&e);        for(i=1;i<=v;i++)        for(j=1;j<=v;j++)        a[i][j]=10000;        for(i=0;i<e;i++)        {            scanf("%d%d%d",&x,&y,&z);            a[x][y]=z;            a[y][x]=z;        }        for(i=0;i<v;i++)        {            scanf("%d",&d);            if(w>d)            w=d;        }        for(i=1;i<=v;i++)     //数据装在新的数组中  方便更新        b[i]=a[1][i];        s=prim(v);        t=s+w;        printf("%d\n",t);    }    return 0;}