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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图片的放大与缩小_photoshop怎么放大图片

    图片的放大与缩小_photoshop怎么放大图片packagecom.school.util;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.image.Buffere

    2022年8月4日
    10
  • IntelliJ IDEA安装及jsp开发环境搭建

    IntelliJ IDEA安装及jsp开发环境搭建一、前言  现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目,一直想吐槽为嘛java项目只能import。昨天一路踩坑,花了一整天的时间搭建好jsp的开发环境,特此记录下安装过程中一些注意的问题以及解决方案。整个过程槽点满满…二、IntelliJIDEA…

    2022年10月21日
    2
  • SQL中SELECT语句详解「建议收藏」

    SQL中SELECT语句详解「建议收藏」本篇文章讲述SQL语句中的SELECT查询语句,以供参考,如有错误或不当之处还望大神们告知。简单查询SELECT-FROM用于无条件查询单张表中的行或列假设有表如图所示查询名字叫‘叶清逸’的记录:select*fromT_USERwhereu_name=’叶清逸’;查询结果:查询一个或多个属性,u_name,u_age,u_scor…

    2022年4月29日
    56
  • python 2021激活码破解方法

    python 2021激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    48
  • 信息收集总结「建议收藏」

    信息收集总结「建议收藏」作为一名菜鸟,写文章,有点紧张,希望大佬们轻点。我写这个是对自己的一个总结和记录,也希望对新手有所帮助。信息收集信息收集是指通过各种方式获取所需要的信息,以便我们在后续的渗透过程更好的进行。最简单的比如说目标站点的IP、中间件、脚本语言、端口、邮箱等等。我觉得信息收集在我们渗透测试的过程当中,是最重要的一环,这一环节没做好,没收集到足够多的可利用的信息,我们很难进行下一步的操作。信息收集主…

    2022年6月16日
    33
  • Docker部署Swarm集群

    Docker部署Swarm集群

    2021年6月2日
    112

发表回复

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

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