ZOJ 1586 : QS Network - prim算法解决最小生成树问题

来源:互联网 发布:创维网络电视机顶盒 编辑:程序博客网 时间:2024/06/07 06:24
分析:
prim算法直接应用

计算建立QS网络的最小费用——最小生成树问题。构造有向网时,每条边权值 = 2个QS的适配器价格 + 这2个QS之间网线的价格。
本题秩序计算最小生成树的权值,不需要记录构造最小生成树时选择的边,故可将lowcost数组和nearvex数组,合二为一。

#include <iostream>#include <stdio.h>#define Max 1000000using namespace std;int edge[1010][1010];int adapter[1010];int lowcost[1010];int t,n;void init(){int i,k,j;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&adapter[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){scanf("%d",&edge[i][j]);if(i==j) edge[i][j]=Max;else edge[i][j]+=adapter[i]+adapter[j];}}void prim(){int sumw=0,i,v,k;lowcost[0]=-1;for(i=1;i<n;i++)lowcost[i]=edge[0][i];for(i=1;i<n;i++){int min=Max;for(k=0;k<n;k++){if(lowcost[k]!=-1&&lowcost[k]<min){v=k;min=lowcost[k];}}sumw+=min;lowcost[v]=-1;for(k=0;k<n;k++){if(lowcost[k]!=-1&&lowcost[k]>edge[k][v])lowcost[k]=edge[k][v];}}printf("%d\n",sumw);}int main(){scanf("%d",&t);while(t--){init();prim();}return 0;}



0 0
原创粉丝点击