HDU1123 还是畅通工程

来源:互联网 发布:南阳网络推广企业 编辑:程序博客网 时间:2024/05/22 09:02

prim算法

要点见注释

#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define maxn  100#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];//temp记录j值,下用               }         }        ans+=m;        l[temp]=0;//temp        v[temp]=1;//temp        for(int i=0;i<N;i++)//更新l数组        {            l[i]=min(l[i],d[temp][i]);        }    }    return ans; } int main(){    int p,q;  //只负责接受数据,不做任何处理     for(int i=0;i<N;i++)//或者memset(d,inf,sizeof(d));        {            for(int j=0;j<N;j++)            {                d[i][j]=inf;             }        }     while(scanf("%d",&N)&&N)    {        for(int i=0;i<N;i++)        {            for(int j=i+1;j<N;j++)            {                scanf("%d %d %d",&p,&q,&d[i][j]);                 d[j][i]=d[i][j];//易忽视点            }        }         printf("%d\n",prim());    }    return 0;}
0 0
原创粉丝点击