poj1251 prim算法

来源:互联网 发布:diagbox软件下载 编辑:程序博客网 时间:2024/06/01 10:04

题目链接:点击打开链接

#include <iostream>#include<cstring>using namespace std;const int INF=0x3f3f3f3f;const int maxn=1e2+10;int sum,ral[maxn][maxn];void Prim(int start,int n){    int a[maxn],lowval[maxn],pos,i,j;//a[]是标记数组    a[start]=1;    sum=0;    for(i=0; i<n; i++)    {        lowval[i]=ral[start][i];        if(i!=start)a[i]=0;    }    for(i=0; i<n-1; i++)    {        int minn=INF;        for(j=0; j<n; j++)        {            if(lowval[j]<minn&&!a[j])            {                minn=lowval[j];                pos=j;            }        }        a[pos]=1;        sum+=minn;        for(j=0; j<n; j++)        {            if(ral[pos][j]<lowval[j])                lowval[j]=ral[pos][j];        }        start=pos;    }}int main(){    int nodeNums;    char s1[5],s2[5];    int i,j,k,a;   while(cin>>nodeNums&&nodeNums)   {       memset(ral,0x3f,sizeof(ral));       for( i=0;i<nodeNums-1;i++)       {           cin>>s1>>j;           while(j--)           {               cin>>s2;             cin>>ral[s1[0]-'A'][s2[0]-'A'];              ral[s2[0]-'A'][s1[0]-'A']=ral[s1[0]-'A'][s2[0]-'A'];           }       }    Prim(0,nodeNums);    cout<<sum<<endl;   }}