公路村村通 (最小生成树)

图的最小生成树问题-公路村村通 题目 08-图7 公路村村通 (30分) 分析 典型的最小生成树问题。 prim算法和dijkstra算法长得很像。prim算法核心思想就是让一棵小树长大,采用贪心策略,每次从小树相邻的顶点中收录一个路径最短的顶点,直到这棵树长到最大。最后检查这棵树中的顶点是否完全包含了图中的顶点,如果没有,就说明图不连通,不存在最小生成树。 prim算法求解代码 #include <stdio.h> # 阅读详情
L3-1 公路村村通  

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

输入格式:

输入数据包括城镇数目正整数NNN(≤1000\le 1000≤1000)和候选道路数目MMM(≤3N\le 3N≤3N);随后的MMM行对应MMM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到NNN编号。

输出格式:

输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1-1−1,表示需要建设更多公路。

输入样例:

6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3

输出样例:

12


/*准备练习一下最小生成树,所以两种方法都试了一下*/

以下是prim算法:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<cstdlib>
#define INF 1000000
using namespace std;
int c[1010][1010],lowcost[1010],vis[1010],n,m,sum=0;
void init(){
	memset(vis,0,sizeof(vis));
	memset(c,INF,sizeof(c));
	int x,y,d,i;
	for(i=0;i<m;i++){
		cin>>x>>y>>d;
		c[x][y]=c[y][x]=min(c[x][y],d);
	}
	for(i=2;i<=n;i++){
		lowcost[i]=c[1][i];
	}
}
int prime(){
	int i,j;
	int p,min;
	vis[1]=1;
	for(i=1;i<n;i++){
	     //处理后面n-1个点
	     min=INF;
	     p=1;
        for(j=2;j<=n;j++){
        	
        	if(lowcost[j]<min && vis[j]==0){
        		min=lowcost[j];
        		p=j;
			}
		}
		vis[p]=1;
		sum+=min;
		for(j=2;j<=n;j++){
			if(lowcost[j]>c[p][j])
			lowcost[j]=c[p][j] ;
		}
	}
}
int main(){
	cin>>n>>m;
	init();
	prime();
	if(sum>=1000000){
		cout<<"-1"<<endl;
		return 0;
	}
	cout<<sum<<endl;
	return 0;

}


以下是kruskal算法:

/*kruskal+快排+并查集*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define INF 1000000
using namespace std;
struct Edge{
	int u;
	int v;
	int d;
};
int n,m,father[1010],sum=0,num=0;
Edge edge[3010];
int find(int x){
	int i=x,j;
	while(x!=father[x])
	   x=father[x];//找根节点
	while(father[i]!=x){
		j=father[i];
		father[i]=x;
		i=j;
	}//压缩路径
	return x;//返回根节点
}
int Union(int a,int b){//合并:判断新的路能不能加入
	int x,y;
	x=find(a);//这里我写错了,写成x=father[a],浪费时间调试半天
	y=find(b);
	if(x==y)
	  return 0;//不能
	else
      father[x]=y;
	return 1;//能
}
void init(){
	int i;
	for(i=0;i<m;i++){
		cin>>edge[i].u>>edge[i].v>>edge[i].d;
	}
    for(i=1;i<=n;i++){
    	father[i]=i;
	}
}
int krustral(){
	int i,j;
	for(i=0;i<m;i++){
		if(Union(edge[i].u,edge[i].v)==1){
			sum+=edge[i].d;
			num++;
		}
		if(num>=n-1)//表示已经连接n-1条路,n个点连通
		break;
	}
}
bool cmp(Edge a,Edge b){
	return a.d<b.d;
}
int main(){
	cin>>n>>m;
	init();
	sort(edge,edge+m,cmp);
	krustral();
	if(num<n-1){
		//注意这里,在prim中是判断sum值是不是超过INF,而kruskal是判断加了几条路,小于n-1条路则不连通
		cout<<"-1"<<endl;
		return 0;
	}
	cout<<sum<<endl;
	return 0;

}


【PTA】7-10 公路村村通 (最小生成树)(Prim+Kruskal) 7-10 公路村村通 (30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通... 阅读详情

相关推荐

PAT 数据结构 06-图6. 公路村村通(30)Prim最小生成树算法

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式说明: 输入数据包括城镇数目正整数N( 输出格式说明: 输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出-1,表示需要建设更多公路。 样例输入与输出: 序号 输入 输出 1 6

兔子哥哥的博客 4404

数据结构PTA 案例6-1.7 公路村村通

案例6-1.7 公路村村通题目解法 题目 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。 输入样例: 6 15 1

Echooo的博客 5005

C 最小生成树 + Prim算法 08-图7 公路村村通 (30分)

08-图7 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通...

BLUEsang的博客 507

数据结构(四)图 —— 编程作业 07 :公路村村通

  题目描述: 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。   输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)。         随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。         为简单起见,城镇从1到N编号。   输出格式: 输出村村通需要的最低成本。         如果输入数据不足以保证畅通,则输出−1,表示需要建设更

大彤小忆的博客 2221

PAT 5-10 公路村村通 && HDU 1232 Kruskal 最小生成树

5-10 公路村村通现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数 NN N( ≤1000\le 1000 ≤1000)和候选道路数目 MM M( ≤3N\le 3N ≤3N);随后的 MM M行对应 MM M条道路,每行给出3个正整数,分别是该条道路直接连通的

lixiyi的博客 1079

数据结构课设 公路村村通 (最小生成树prim算法)

5-16 公路村村通   (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数NN(\le 1000≤1000)和候选道路数目MM(\le 3N≤3N);随后的MM行对应MM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改

Benjamin_Z的博客 2801

PTA—公路村村通

题目大意:现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。分析:这道题要使用最小生成树的算法。我使用了Prime算法。

ghw909的博客 965

基于最小生成树的公路村村通优化设计(30)

最小生成树作为图论中的核心概念,其严谨的数学定义和结构性质构成了整个算法体系的基础。理解这些基本要素不仅有助于判断问题是否可归约为MST求解,还能为算法正确性的证明提供关键依据。

weixin_36277197的博客 795

08-图7 公路村村通   (30分)

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数NNN(≤1000\le 1000≤1000)和候选道路数目MMM(≤3N\le 3N≤3N);随后的MMM行对应MMM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见

yeternity的博客 1455

优惠券管理

(请设计一个优惠券兑换码生成方案,可以支持20亿以上的唯一兑换码,兑换码长度不超过10,只能包含字母数字,并且要保证生成和校验算法的高效)最后把签名值的后14位、新鲜值(4位)、自增序列(32位)拼接,得到一个50位二进制数,然后与一个较大的质数做异或运算加以混淆,再基于Base32或Base64转码,即可的对兑换码。现在,就剩下防止爆刷了。自增id从1增加到Integer的最大值,可以达到40亿以上个数字,而占用的字节仅仅4个字节,也就是32个bit位,距离50个bit位的限制还有很大的剩余,符合要求!

qq_36312661的博客 2204

Ubuntu断网环境下的系统更新:apt-offline保姆级教程(附常见问题排查)

本文详细介绍了在Ubuntu断网环境下使用apt-offline进行系统更新的完整教程,包括环境准备、签名文件生成、数据传输方案对比及常见问题排查。特别适用于企业级开发环境或安全敏感场景,帮助运维人员高效完成离线系统更新,确保系统安全与稳定。

weixin_29214691的博客 359

PTA练习题:公路村村通

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。 输入样例: 6 15 1 2 5 1 3 3 1 4 7 1 5

weixin_45735242的博客 3530

周立功CAN盒二次开发实录:用QT5.1.0解析汽车CAN报文(附数据可视化技巧)

本文详细介绍了基于QT5.1.0和周立功USBCAN-E-U设备进行汽车CAN总线二次开发的实战过程。核心内容包括利用CANdb++数据库解析原始报文并转换为物理值,以及通过QCustomPlot库实现高性能实时数据可视化,为车载诊断与车联网开发提供了一套完整的工程实践方案。

sugar的博客 1058

最小生成树 公路村村通

/ 图结构(采用邻接矩阵存储边,且从[1,1]开始存储,为了对应城镇从1开始编号)// 在未被收录的顶点中选取一个与树连接且离树最近的一个顶点下标。// 采用Prim算法生成最小树,并返回权重(无法生成则返回0)// 创建收录数组(从下标1开始存储),准备收录结点1为树根结点。// 更新未被收录的MinV的邻接点的离树的权重。// 将其收录,累计收录结点数与最小树的权重。// 在未被收录的顶点中选取一个与树连接且离树最近的一个。// 分别记录收录的结点数目与最小树的权重。// 未被收录且权重更小。

2401_88747264的博客 752

Win11系统下Notepad++右键菜单失效?3种修复方法实测有效(附注册表备份指南)

本文针对Windows 11系统中Notepad++右键菜单失效的常见问题,提供了三种经过实测有效的修复方法。核心解决方案包括使用官方NppShell.dll重新注册、手动修复注册表项以及系统级问题排查,并详细说明了操作前的注册表备份指南,确保修复过程安全可靠。

m2n3b4v5c6的博客 328

YOLOv8改进,YOLOv8添加DCNv3可变性卷积,无需编译

DCNv3在DCNv2版本上进行了改进,上一期我们在YOLOv8中添加了DCNv2,这一期我们将添加DCNv3,DCNv3代码详解可以参考链接:代码详解——可变形卷积(DCNv3)

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 5021

7-10 公路村村通(最小生成树)

【代码】7-10 公路村村通(最小生成树)

2301_76605590的博客 307

疾风气象大模型4.0白皮书

《疾风气象大模型白皮书摘要》 疾风气象大模型(J-AFM)是国内首个基于3D建模的气象智能平台,突破传统二维气象分析的局限,采用体素化技术构建"x-y-z-t"四维统一模型,实现从分钟级短临到30天跨时效的连续预测。核心技术包括:1)多源数据三维同化,融合雷达、卫星、风廓线等异构数据;2)物理约束AI解码器,嵌入能量守恒、湍流封闭等气象原理;3)行业适配插件,服务风电、光伏、航空等领域,如山地风场尾流校正、云影短临预测。平台支持批流一体推理与边缘部署,提供概率化输出和误差溯源能力,显著降

专注AI大模型,软件混淆,授权 542

sdut oj3362 数据结构实验之图论六:村村通公路(最小生成树)

题目链接:点击打开链接 数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory limit: 65536K 题目描述 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所

Annfan123的博客 703

ClawManager实战:OpenClaw批量部署+精细化权限管控,运维效率拉满90%

ClawManager彻底解决了OpenClaw规模化部署的运维痛点,它不是简单的“批量部署工具”,而是一套完整的企业级管理方案——从模板配置、批量部署,到权限管控、监控审计、AI治理,覆盖OpenClaw全生命周期管理,让OpenClaw从“个人工具”升级为“企业级AI基础设施”。对于中小企业,Docker一键部署即可快速落地,无需复杂配置;对于大型企业,K8s部署支持高可用、横向扩展,结合Keycloak对接企业现有认证系统,可完美融入企业IT架构。

2601_94871597的博客 608

全新YOLOv11有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

YOLOv11专栏持续更新500+种创新改进方案,涵盖卷积优化、注意力机制、主干网络、Neck特征融合、检测头、小目标检测等核心模块。提供独家创新点组合方案、模型轻量化改进及最新Mamba架构融合技术,配套完整实验代码和训练参数解析。订阅用户可加入专属答疑群,获取一键运行项目支持。专栏包含YOLOv11网络结构详解、配置文件解读等入门必读内容,助力科研论文发表与模型性能提升。限时开放订阅通道,提供多种涨点改进方案组合,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 3998

数据结构PTA习题:案例6-1.7 公路村村通 (30分)——最小生成树

案例6-1.7 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。 输出格式: 输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。 输入样例: 6 15 1

wulila的博客 2374

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

7-10 公路村村通 (30分) (最小生成树Prime与Kruskal算法)

PTA数据结构与算法题目集:7-10 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号...

只想用最简短的代码刷题 1859

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构实验之图论六:村村通公路(最小生成树prim算法)

数据结构实验之图论六:村村通公路 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所需要的最低成本。 I

SoyBean 751

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

7-10 公路村村通(30 分)(最小生成树Prim算法)

7-10公路村村通(30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编...

weixin_34345753的博客 345

最小生成树 案例6-1.7 公路村村通

题目链接 思路:最小生成树问题,我们直接利用kruskal算法。即将所有边按照权重从小到大排列,每次挑选其中权重最小的边生成树,并且每次挑选时要筛去选择该边会形成回路的边,利用并查集即可,若在并查集中两点同根,即两点连通,则选择连接两点的边会形成回路. #include #include #include #include using namespace std; const int MAX = 3e3; struct edge { int v, t, w; edge(int a, int b, int c

weixin_51442864的博客 476
上一篇: 求前缀表达式的值
下一篇: 关于堆的判断 (小顶堆)
danting1126
博客等级 码龄10年 10粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值