NYOJ 38 布线问题_(解法2 Prim算法)

NYOJ 38 布线问题_(解法2 Prim算法)

大家好,又见面了,我是全栈君。

时间限制:
1000 ms  |  内存限制:
65535 KB
难度:
4

描写叙述
南阳理工学院要进行用电线路改造。如今校长要求设计师设计出一种布线方式。该布线方式须要满足下面条件:

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

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <limits.h>
#include <malloc.h>

using namespace std;

int sum;

void Prim(int **node, int v)
{
	sum=0;
	int i,j,k,min;
	int *minCost=(int *)malloc(sizeof(int)*v);

	minCost[0]=0;

	for(i=1;i<v;i++)
		minCost[i]=node[0][i];

	for(i=1;i<v;i++)
	{
		min=INT_MAX;
		for(j=1,k=1;j<v;j++)
		{
			if(minCost[j] && minCost[j]<min)
			{
				min=minCost[j];
				k=j;
			}
		}

		sum+=minCost[k];
		minCost[k]=0;

		for(j=1;j<v;j++)
		{
			if(minCost[j] && minCost[j]>node[k][j])
			{
				minCost[j]=node[k][j];
			}
		}
	}
}

int main()
{
	int n,v,e,i,j,k,l;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&v,&e);

		int **node=(int **)malloc(sizeof(int*)*v); 

		for(i=0;i<v;i++)
			node[i]=(int *)malloc(sizeof(int)*v);

		for(i=0;i<v;i++)
			for(j=0; j<v; j++)
				node[i][j]=INT_MAX;


		for(l=0;l<e;l++)
		{
			scanf("%d%d%d",&i,&j,&k);
			node[i-1][j-1]=node[j-1][i-1]=k;
		}

		Prim(node, v);

		int *av=(int *)malloc(sizeof(int)*v);

		for(i=0;i<v;i++)
			scanf("%d",&av[i]);
		sort(av,av+v);

		printf("%d\n",sum+av[0]);

	}
	return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115567.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于单片机的水位检测系统_51单片机温度传感器程序

    基于单片机的水位检测系统_51单片机温度传感器程序开发前的准备:LCD1602一块51单片机开发板一块(这里我用的是普中的板子)霍尔水流量传感器一块(红色接5V黑色接GND黄色是数据传接口)霍尔传感器流量经验公式:Q=(F+3)/8.1Q表示流量…

    2022年9月27日
    0
  • 线程运行超时处理类

    线程运行超时处理类

    2021年8月17日
    50
  • mysql的端口是多少_如何查看db2数据库的端口

    mysql的端口是多少_如何查看db2数据库的端口查看mysql端口号(mysql端口号是多少)2020-05-0722:11:45共10个回答如何查看mysql的端口号1使用命令showglobalvariableslike’port’;查看端口号2修改端口,编辑/etc/my.cnf文件,早期版本有可能是my.conf文件名,增加端口参数,并且设定端口,注意该端口未被使用,保存退出.总结:注意修改的端口不要被占用,而且要有规划,不要轻意的总…

    2022年10月3日
    0
  • Android Hook技术实践

    Android Hook技术实践一、hook简介hook俗称钩子,主要作用是替换系统内存中的对象,在上层调用此对象的方法的时候可以修改传入参数或者返回值,达到欺骗上层的目的,就像小红帽故事里的大灰狼,通过扮演小红帽的外婆的角色来达到欺骗小红帽的目的。其实hook就是一种中间人劫持的思想,如图所示:在安卓中实现hook主要通过两种方式:1.反射技术和代理实现,当然代理不管是动态还是静态的都是可以实现的,但是只能ho

    2022年5月26日
    31
  • linux下如何保存退出vim编辑器

    linux下如何保存退出vim编辑器命令:vimapp.py如果不存在app.py则会自动创建1.进入编辑器后按字母“i”即可进入编辑状态(此时左下角会出现 “插入”)2.退出的时候分为4种情况:保存退出、正常退出、不保存退出以及强制退出 2.1:保存退出:按“Esc”键后此时的“插入”会消失,然后按Shift+zz就可以保存修改内容并退出 2.2:不保存退出:当修改修改了一部分内容后发现修改错了,此时就会进行不保存退…

    2022年6月3日
    237
  • linux常见的文件系统类型_linux查看文件编码格式

    linux常见的文件系统类型_linux查看文件编码格式文件系统类型就是分区的格式。msdos:dos文件系统类型vfat:支持长文件名的dos分区文件系统,可以理解为winds文件系统类型iso9660:光盘格式文件系统ext2/ext3/ext4:linux下主流的文件系统xfs:linux下一种高性能的日志文件系统,在centos7.x中默认的文件系统nfsd:一种分布式文件系统1.查看文件系统类型: #mount  查看分区挂载…

    2022年9月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号