poj1287(prime)

来源:互联网 发布:cnnic微博数据 编辑:程序博客网 时间:2024/05/13 15:54

题意稍有变形,就是每两点之间,又不只一条长度的路,边没有方向,也就是你做邻接矩阵图,选小的当双向边就好了。

#include<cstdio>#include<cstring>using namespace std;int P,R;int M[210][210],book[210],dist[210];int Prime(){    int sum=0;    memset(book,0,sizeof(book));    for(int i=1;i<=P;i++)        dist[i]=M[1][i];    book[1]=1;    for(int i=2;i<=P;i++)    {        int Min=99999999,index;        for(int j=1;j<=P;j++)        {            if(!book[j]&&dist[j]<Min)            {                Min=dist[j];                index=j;            }        }        book[index]=1;        sum+=Min;        for(int j=1;j<=P;j++)        {            if(!book[j]&&M[index][j]<dist[j])                dist[j]=M[index][j];        }    }    return sum;}int main(){    while(~scanf("%d %d",&P,&R)&&P)    {        for(int i=1;i<=P;i++)            for(int j=1;j<=P;j++)        {            if(i==j) M[i][j]=0;            else M[i][j]=99999999;        }        for(int i=1;i<=R;i++)        {            int a,b,c;            scanf("%d %d %d",&a,&b,&c);            if(c<M[a][b])            {               M[a][b]=c;               M[b][a]=c;            }        }        printf("%d\n",Prime());    }}
0 0