hdu 1301

来源:互联网 发布:收纳神器 知乎 编辑:程序博客网 时间:2024/06/04 18:57

最小生成树模板题

简单的prim算法


AC代码:

#include <iostream>#include <stdio.h>#define INF 9999999using namespace std;int map[200][200],dis[200],vis[200];int prim(int n){    int i,j,min,p;    for(i=1;i<=n;i++)    {        dis[i]=map[1][i];        vis[i]=0;    }    vis[1]=1;    int sum=0;    for(i=2;i<=n;i++)    {        min=INF;        for(j=1;j<=n;j++)            if(!vis[j]&&min>dis[j])            {                min=dis[j];                p=j;            }            sum+=min;            vis[p]=1;            for(j=1;j<=n;j++)            {                if(!vis[j]&&dis[j]>map[p][j])                    dis[j]=map[p][j];            }    }    return sum;}int main(){    int n,i,j,d,d1;    char c,c1;    while(cin>>n&&n)    {        for(i=1;i<=n;i++)            for(j=1;j<=n;j++)                map[i][j]=INF;        //while(n--&&cin>>c>>d)        for(i=1;i<n;i++)        {            cin>>c>>d;            for(j=1;j<=d;j++)            {                cin>>c1>>d1;                map[c-'A'+1][c1-'A'+1]=d1;                map[c1-'A'+1][c-'A'+1]=d1;            }        }        //for(i=1;i<=n;i++,cout<<endl)        //    for(j=1;j<=n;j++)        //        cout<<map[i][j]<<" ";        cout<<prim(n)<<endl;    }    return 0;}


0 0
原创粉丝点击