hdu 1879 继续畅通工程

来源:互联网 发布:软件测试程序 编辑:程序博客网 时间:2024/05/18 01:25

题目:

        链接:点击打开链接

题意:

        中文

算法:

        最小生成树

思路:

代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;#define MAXN 110#define MAX 100000000int map[MAXN][MAXN];int low[MAXN];int vis[MAXN];int n,m;void prim(){    int k,pos,minn;    int result = 0;    memset(vis,0,sizeof(vis));    pos = 1;    vis[pos] = 1;    for(int i=1; i<=n; i++)    {        if(i != pos)            low[i] = map[pos][i];    }    for(int i=1; i<n; i++)    {        minn = MAX;        for(int j=1; j<=n; j++)        {            if(!vis[j] && minn > low[j])            {                minn = low[j];                pos = j;            }        }        result += minn;        vis[pos] = 1;        for(int j=1; j<=n; j++)        {            if(!vis[j] && map[pos][j]<low[j])                low[j] = map[pos][j];        }    }    printf("%d\n",result);}int main(){    //freopen("input.txt","r",stdin);    int a,b,c,d;    while(scanf("%d",&n) != EOF && n)    {        m = n*(n-1)/2;        for(int i=1; i<=m; i++)        {            scanf("%d%d%d%d",&a,&b,&c,&d);            if(d == 0)                map[a][b] = map[b][a] = c;            else                map[a][b] = map[b][a] = 0;        }        prim();    }    return 0;}


0 0
原创粉丝点击