您的位置:首页 > 其它

最小生成树 prim

2016-06-02 10:18 239 查看
    #include "stdio.h"  

    #include "stdlib.h"  

    #define MAX 110  

    int a[MAX][MAX],p[MAX];  

      

    int main(void)  

    {  

        int i,j,k,n,t,min,sum,new_point,x,y,d;  

        printf("请输入顶点的个数:");  

        scanf("%d",&n);  

        t=n*(n-1)/2;

        for(i=0;i<MAX;i++){

            p[i] = 0;

        }

        //memset(p,0,sizeof(p));   //将p数组初始化为0  

        printf("请输入每条边的起始端点、权值:/n");  

        for(i=0;i<t;i++)  

        {  

            scanf("%ld%ld%ld",&x,&y,&d);   //输入每条边的权值  

            a[x][y]=a[y][x]=d;  

        }  

        p[1]=1;  

        sum=0;  

        for(k=0;k<n-1;k++)  

        {  

            min=-1;  

            for(i=1;i<=n;i++)  

            {  

                if(p[i]==1)  

                {  

                    for(j=1;j<=n;j++)  

                    {  

                        if(p[j]==0 && (min==-1 || min>a[i][j]))  

                        {  

                            min=a[i][j];   //从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边  

                            new_point=j;  

                        }  

                    }  

                }  

            }  

            p[new_point]=1;  

            sum+=min;  

      

        }  

        printf("最小生成树的权值为:%d/n",sum);  

        system("pause");  

        return 0;  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: