#头歌 算法 应用最小生成树算法编程-Agri-Net(中文版)

文章讲述了农夫约翰计划为农村地区农场提供互联网连接,通过Prim算法计算最少光纤长度,以降低成本。输入是一个连通性矩阵,表示农场间的距离,输出是最小光纤总长度。
摘要由CSDN通过智能技术生成

第1关:Agri-Net(中文版)

题目描述

农夫约翰被选为镇长了!他的竞选承诺之一是将互联网连接到该地区的所有农场。他当然需要你的帮助。 农民约翰为他的农场订购了高速连接,并打算与其他农民共享他的连接。为了将成本降到最低,他希望铺设最少数量的光纤来连接他的农场和所有其他农场。 给定连接每一对农场所需的光纤数量的列表,您必须找到连接它们所需的最小光纤数量。每个农场必须连接到其他农场,这样数据包就可以从任何一个农场流到任何其他农场。 任何两个农场之间的距离都不会超过 100000。

输入格式

输入包括几种情况。对于每种情况,第一行包含农场的数量 N (3 <= N <= 100)。下面几行包含了 N × N 的连通性矩阵,其中每个元素表示从一个农场到另一个农场的距离。逻辑上,它们是由 N 个空格分隔的整数组成的N行。从物理上讲,它们的长度被限制在 80 个字符,所以一些行可以接续到其他行。当然,对角线将是 0,因为从农场 i 到它自己的距离对这个问题来说并不有趣。

输出格式

对于每种情况,输出一个整数长度,该长度是连接整个农场集所需的最小光纤长度的和。

输入输出样例

输入
 
  1. 4
  2. 0 4 9 21
  3. 4 0 8 17
  4. 9 8 0 16
  5. 21 17 16 0
输出
 
  1. 28

最后通关代码

#include<stdio.h>

int m,n,sum,e[110][110],book[110],dis[110];

int inf = 99999999;

void Prim()

{

    int i,j,k,min;

    for(i = 1; i <= n; i ++)

    {

        dis[i] = e[1][i];

        book[i] = 0;

    }

    dis[1] = 0;

    book[1] = 1;

    for(i = 1; i < n; i ++)

    {

        min = inf;

        for(j = 1; j <= n; j ++)

            if(book[j] == 0 && dis[j] < min)

            {

                min = dis[j];

                k = j;

            }

        sum += min;

        book[k] = 1;

        for(j = 1; j <= n; j ++)

            if(book[j] == 0 && dis[j] > e[k][j])

                dis[j] = e[k][j];

    }

}

int main()

{

    int i,j;

    while(scanf("%d",&n) != EOF)

    {

        sum = 0;

        for(i = 1; i <= n; i ++)

            for(j = 1; j <= n; j ++)

                scanf("%d",&e[i][j]);

        Prim();

        printf("%d\n",sum);

    }

    return 0;

}

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值