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

原创 2016年08月18日 21:34:52

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

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;
}


版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

数据结构实验之图论六:村村通公路 sdut oj (3362)

prim算法
  • rain_snowing
  • rain_snowing
  • 2016年08月18日 09:28
  • 920

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

题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表...
  • Ambercherryy
  • Ambercherryy
  • 2016年08月20日 08:32
  • 282

数据结构实验之图论九:最小生成树

数据结构实验之图论九:最小生成树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descript...
  • Horizonhui
  • Horizonhui
  • 2017年11月22日 15:26
  • 794

数据结构课设 公路村村通 (最小生成树prim算法)

5-16 公路村村通   (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据...
  • Strokess
  • Strokess
  • 2016年03月21日 08:12
  • 1387

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

 数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory limit: 65536K 题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定...
  • femalcoder
  • femalcoder
  • 2016年08月19日 14:37
  • 764

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

数据结构实验之图论六:村村通公路 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 当前农村公路建设正如火如荼的展...
  • qq_33435265
  • qq_33435265
  • 2016年04月20日 21:32
  • 490

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

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri...
  • qq_36316736
  • qq_36316736
  • 2017年08月09日 19:12
  • 46

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

题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表...
  • fengkuangdewoniudada
  • fengkuangdewoniudada
  • 2016年08月20日 19:11
  • 226

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

Problem Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,...
  • minose
  • minose
  • 2017年06月12日 19:03
  • 121

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

#include #include #include #define MAX 0x3f3f3f3fusing namespace std;int map[1123][1123]; int vis...
  • ywj_justdoit
  • ywj_justdoit
  • 2017年12月07日 16:51
  • 29
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:暑假集训 8.18 数据结构实验之图论六:村村通公路 (最小生成树)
举报原因:
原因补充:

(最多只允许输入30个字)