关闭

暑假集训 8.18 数据结构实验之图论六:村村通公路 (最小生成树)

标签: 数据结构sdutoj3362最小生成树并查集
704人阅读 评论(0) 收藏 举报
分类:

数据结构实验之图论六:村村通公路

Time Limit: 1000MS Memory limit: 65536K

题目描述

当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所需要的最低成本。

输入

连续多组数据输入,每组数据包括村落数目N(N <= 1000)和可供选择的道路数目M(M <= 3000),随后M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个村庄的编号和修建该道路的预算成本,村庄从1~N编号。 

输出

输出使每个村庄都有公路连通所需要的最低成本,如果输入数据不能使所有村庄畅通,则输出-1,表示有些村庄之间没有路连通。 

示例输入

5 8
1 2 12
1 3 9
1 4 11
1 5 3
2 3 6
2 4 9
3 4 4
4 5 6

示例输出

19


代码更新 2016.11.25

由于数据结构测试 重新写了代码 不需要并查集了!!!

#include <iostream>
#include <cstring>
using namespace std;

const int inf=1000010;

int mp[1011][1011]; ///边权
bool v[1011]; ///是否进入mst
int dis[1011]; ///到树的距离

int n,m;
int mstlen,flag;

void prim()
{
    int j,i,num=0;
    memset(v,0,sizeof(v));

    mstlen=0;
    v[1]=1;

    for (i=1; i<=n; i++)
    {
        dis[i]=mp[1][i];
    }

    int d,pos;
    for(i=1; i<=n-1; i++)
    {
        d=inf;
        for (j=1; j<=n; j++)
        {
            if (v[j] == 0 && dis[j] < d)
            {
                d=dis[j];
                pos=j;
            }
        }

        if (d==inf) /// 可以用来判断是否联通 找不到点而且循环未结束 则不联通了
        {
            flag=0;
            break;
        }

        mstlen+=d;
        v[pos]=1;
        dis[pos]=0;

        for (j=1; j<=n; j++) ///更新最小距离
        {
            dis[j]=min(dis[j],mp[pos][j]);
        }
    }
}

int main()
{
    int i,j,v,u,key;

    while (cin>>n>>m)
    {
        flag=1;
        memset(mp,inf,sizeof(mp));

        for (i=1; i<=m; i++)
        {
            cin>>u>>v>>key;
            if (mp[u][v] > key) /// 是否重边
            {
                mp[u][v]=mp[v][u]=key;
            }
        }

        prim();

        if (flag==1)
        {
            cout<<mstlen<<endl;
        }
        else
        {
            cout<<-1<<endl;
        }
    }
    return 0;
}


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25722次
    • 积分:1422
    • 等级:
    • 排名:千里之外
    • 原创:111篇
    • 转载:2篇
    • 译文:0篇
    • 评论:4条
    博客专栏