poj 1251 jungle roads

来源:互联网 发布:unity3d 四元数 编辑:程序博客网 时间:2024/06/02 03:58

prim算法

#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define maxn  30#define inf   0xfffffffint n;   //总点数int d[maxn][maxn];//村庄图int v[maxn];//已选标记int l[maxn];//点到已选点最短路径长度int prim(){    int ans=0;//结果     memset(v,0,sizeof(v));//初始化,清零    v[0]=1;    l[0]=0;//已选(0,0)为起点    for(int i=1;i<n;i++)    {        l[i]=d[0][i];    }    for(int i=1;i<n;i++)    {        int m=inf,temp;        for(int j=0;j<n;j++)        {            if(!v[j]&&m>l[j])            {                m=l[temp=j];                }         }        ans+=m;        l[temp]=0;        v[temp]=1;        for(int i=0;i<n;i++)        {            l[i]=min(l[i],d[temp][i]);        }    }    return ans; } int main(){    int p,q;    char a[2],b[2];    while(scanf("%d",&n)&&n)    {        for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                if(i==j)                {                    d[i][j]=0;                }                else                {                    d[i][j]=inf;                }            }        }        for(int i=1;i<n;i++)        {            scanf("%s %d",&a,&p);            for(int j=0;j<p;j++)            {                scanf("%s %d",&b,&q);                d[a[0]-'A'][b[0]-'A']=d[b[0]-'A'][a[0]-'A']=q;            }        }         printf("%d\n",prim());    }    return 0;}
0 0