zoukankan      html  css  js  c++  java
  • 最优布线问题

    题目

    题目描述

       学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。  
       当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。
      现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。

    输入

    第一行为整数n(2<=n<=100),表示计算机的数目。此后的n行,每行n个整数。第x+1行y列的整数表示直接连接第x台计算机和第y台计算机的费用。

    输出

    一个整数,表示最小的连接费用。

    输入样例 复制

    3
    0 1 2
    1 0 1
    2 1 0

    输出样例 复制

    2

    说明

     

    分析

       最小生成树模板

     

    代码

       prime

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[101][101],wz;
     4 bool pd[101];
     5 int dis[101],minn;
     6 int n,x,ans=0;
     7 void fun()
     8 {
     9     cin>>n;
    10     for(int i=1;i<=n;i++)
    11      for(int j=1;j<=n;j++)
    12       cin>>a[i][j];
    13       
    14       memset(dis,0x1f,sizeof(dis));
    15       dis[1]=0;
    16       for (int i=1;i<=n;i++)   //每次找到最小的一个点
    17       {
    18            minn=1e9;
    19            for (int j=1;j<=n;j++)
    20            {
    21                if (pd[j]==0&&dis[j]<minn)
    22                {
    23                    minn=dis[j];
    24                    wz=j;
    25                }
    26            }
    27            pd[wz]=1;
    28           ans+=minn;
    29              for (int j=1;j<=n;j++)  //将最小的点与之相连的边跟新值
    30                if (pd[j]==0&&a[wz][j]>0)
    31                     dis[j]=min(dis[j],a[wz][j]);
    32            
    33       }
    34       
    35 }
    36 int main()
    37 {
    38     fun();
    39     cout<<ans;
    40 }
    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    Robotium 测试方法
    T-SQL—理解CTEs
    SQLServer复制(二)--事务代理作业
    数据库复制(一)--复制介绍
    小议如何使用APPLY
    优化SQLServer——表和分区索引(二)
    关于UNPIVOT 操作符
    XML 在SQLServer中的使用
    列存储索引1:初识列存储索引
    T-SQL性能调整(一)--编译和重新编译
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10769455.html
Copyright © 2011-2022 走看看