题目链接

描述

南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:

1、把所有的楼都供上电。

2、所用电线花费最少

  • 输入

    第一行是一个整数n表示有n组测试数据。(n<5)每组测试数据的第一行是两个整数v,e.v表示学校里楼的总个数(v<=500)随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100)。(哪两栋楼间如果没有指明花费,则表示这两栋楼直接连通需要费用太大或者不可能连通)随后的1行里,有v个整数,其中第i个数表示从第i号楼接线到外界供电设施所需要的费用。( 0<e<v*(v-1)/2 )(楼的编号从1开始),由于安全问题,只能选择一个楼连接到外界供电设备。数据保证至少存在一种方案满足要求。
  • 输出

    每组测试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。
  • 样例输入

    1

    4 6

    1 2 10

    2 3 10

    3 1 10

    1 4 1

    2 4 1

    3 4 1

    1 3 5 6
  • 样例输出

    4

分析:

用prim算法求最小生成树,在同一个图中的最小生成树一定是唯一确定的,所以不管从那个点开始建树都是一样的,首先求起始点到其一每个点的最短距离,然后把最短距离的那个点与起始点一起构成树,然后循环找没有在树中且与树的距离最短的点。

代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
int Tu[502][502];
int dis[502];
int bj[502];
int v,e;
int prim()///普里姆算法
{
int sum=0;
for(int i=1; i<=v; i++)
{
dis[i]=Tu[1][i];///到i点的最短距离
bj[i]=0;///标记这个点有没有访问过
}
bj[1]=1;///1点访问过了
int flag=1;///下一个起始点
int cut=1;///线的个数
while(cut<v)
{
int Min=INF;
for(int i=1; i<=v; i++)
{
if(bj[i]==0&&dis[i]<Min)///找到下一个最短距离
{
Min=dis[i];
flag=i;
}
}
sum+=dis[flag];///加上这个距离
bj[flag]=1;///标记flag点访问过
cut++;///条数加
for(int i=1; i<=v; i++)
if(bj[i]==0&&dis[i]>Tu[flag][i])///这个点没有访问过并且最短距离可以更新
{
dis[i]=Tu[flag][i];
}
}
return sum; }
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&v,&e);
int a,b,c;
for(int i=1; i<=v; i++)
for(int j=1; j<=v; j++)
{
if(i==j)
Tu[i][j]==0;
else
Tu[i][j]=INF;
}
while(e--)
{
scanf("%d%d%d",&a,&b,&c);
Tu[a][b]=Tu[b][a]=min(Tu[a][b],c);///可能会存在重复输入路径的情况
}
int Min=0x3f3f3f3f;
int num;
for(int i=1; i<=v; i++)///求得最小的外接费用
{
scanf("%d",&num);
Min=min(Min,num);
}
printf("%d\n",prim()+Min);
}
return 0;
}

最新文章

  1. arcgis api for js入门开发系列六地图分屏对比(含源代码)
  2. 使用Nginx配置NodeJs程序(Windows平台)
  3. socket编程listen函数限制连接数的解决方案
  4. ZOJ 3785 What day is that day?(今天是星期几?)
  5. Qt5 程序发布打包
  6. 开发框架XUtils
  7. 问题-delphi无法编辑oracle表
  8. ZOJ 3734 LIKE vs CANDLE
  9. vue2组件之select2调用
  10. Linux 定时任务不生效的问题
  11. 使用TortoiseGit操作分支的创建与合并
  12. 全文搜索引擎 ElasticSearch 还是 Solr?
  13. 绕过阿里云waf进行SQL注入
  14. JS制作图片切换
  15. logback 设置按天,文件切割大小,总共日志文件大小。
  16. 客户机容易随机出现自动重启、游戏卡问题?不妨优化下BIOS中节能技术!
  17. 超简单MVC应用程序播放WMV视频
  18. 20155301 《网络攻防》 Exp5 MSF基础应用
  19. python --葵花宝典
  20. selenium webdriver处理HTML5 的视频播放

热门文章

  1. 4,由spring展开的串烧
  2. weblogic中配置自定义filter和servlet
  3. 详说大数据计算的可类化Classable
  4. 为什么logstash进程的CPU使用率100%?
  5. Visual Studio 2012安装包
  6. LeetCode 61——旋转链表
  7. 移动端webapp如何隐藏浏览器的导航栏
  8. Collections常用方法总结
  9. PAT 1045 快速排序
  10. Android调用Java WebSevice篇之二