首页 > 其他分享 >5471: 数据结构实验--图的最小代价生成树 prim

5471: 数据结构实验--图的最小代价生成树 prim

时间:2023-05-01 13:44:26浏览次数:38  
标签:prim lowc vis -- 生成 int fa 5471 顶点

描述

 

 

求带权无向图的最小代价生成树。

 

 

 

 

输入

 

 

输入数据为多组,每组数据包含多行,第一行为2个整数n,e,n为图的顶点数,e为边数,接下来是e行,每行3个整数,前两个整数是一个顶点对,代表一条边所依附的两个顶点,第3个整数是边的权值。

所有值不超过20。

 

 

输出

 

 

请使用prim算法生成一棵生成树(从顶点1出发,权值相同时从编号较小的顶点开始扩展),并输出为生成树的各条边及其权值。格式见样例。

 

 

样例输入

 

5 7
1 2 1
1 3 1
2 3 4
2 4 2
2 5 1
3 4 5
4 5 6

样例输出

 

1 2 1
1 3 1
2 5 1
2 4 2

#include<bits/stdc++.h>
using namespace std;
const int N=105;
const int INF=0x3f3f3f3f;
int lowc[N],vis[N],G[N][N],fa[N];
int Prim(int n)
{
    vis[1]=1;
    for(int i=2;i<=n;i++)lowc[i]=G[1][i],fa[i]=1;

    for(int i=2;i<=n;i++)
    {
        puts("目前各个点的最短边为:");
        for(int k=2;k<=n;k++)
        {
            printf("从 %d 到 %d 的边,距离为%d\n",fa[k],k,lowc[k]);
        }
        int minc=INF;
        int p=-1;
        for(int j=1;j<=n;j++)
            if(!vis[j]&&minc>lowc[j])
                minc=lowc[j],p=j;
        printf("所有相连边里最短的是从 %d 到 %d ,距离为:%d,选%d作为中间点\n",fa[p],p,minc,p);
        vis[p]=1;
        for(int j=1;j<=n;j++)
            if(!vis[j]&&lowc[j]>G[p][j])
            {
printf("从%d点和%d点距离是%d小于从%d到%d的距离%d,故%d点的最短边距离更新为%d,相连的点是%d\n",p,j,G[p][j],fa[j],j,lowc[j],j,G[p][j],p);
                   lowc[j]=G[p][j],fa[j]=p;             
            }

    }
}
int main()
{
    int n,e,u,v,w;
    while(scanf("%d%d",&n,&e)!=EOF)
    {
        memset(G,INF,sizeof(G));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<e;i++)
        {
            scanf("%d%d%d",&u,&v,&w);
            G[u][v]=G[v][u]=w;
        }
        Prim(n);
    }
    return 0;
}
/*
6 10
1 2 6
1 3 1
1 4 5
2 3 5
2 5 3
3 4 5
3 5 6
3 6 4
4 6 2
5 6 6
*/

 

 

标签:prim,lowc,vis,--,生成,int,fa,5471,顶点
From: https://www.cnblogs.com/jyssh/p/17366442.html

相关文章

  • JAVA的Jdbc连接Access数据库
      Eclipse加入Access_JDBC30.jar:   程序如下:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;publicclassconn{publicstaticStringconnct(){try{......
  • rabbitmq 延迟队列_Delayed Message 插件实现 RabbitMQ 延迟队列
    延迟队列是为了存放那些延迟执行的消息,待消息过期之后消费端从队列里拿出来执行。作者简介:五月君,NodejsDeveloper,慕课网认证作者,热爱技术、喜欢分享的90后青年,欢迎关注Nodejs技术栈(id:NodejsRoadmap)和Github开源项目 https://www.nodejs.redDLX+TTL方式存在的时序问......
  • 性能_2 Jmeter脚本增强
    一、写脚本注意事项(回顾):协议:http,https必须写域名或ip:不能有/请求方法:看清楚接口文档路径:不要把域名和ip再次路径中,前后空格要看清楚%20空格的urlencoded编码内容编码:utf8请求体编码控制:内容编码消息头参数,勾选编码urlencoded响应乱码:......
  • 5 月训练记录
    [POI2017]Turysta学习了竞赛图构造汉密尔顿回路。首先对竞赛图缩点,最终拓扑序一定是一条链。考虑如何在一个强连通竞赛图中构造汉密尔顿回路。首先,我们尝试构造汉密尔顿通路。考虑增量构造。我们一个个地加点,设当前加入的点为\(x\),当前构造好的路径为\(s\)到\(t\),那么我们......
  • PipeCAD ISO Messages
    PipeCADISOMessageseryar@163.comAbstract.PipeCADIsoAlgosupportsseveralmessageenclosureboxtypesthatcanbepositionedontheisometricdrawing.Eachtypehasauniqueattributeidentifier.KeyWords.PipeCAD,IsoAlgo,PCF/IDF,PipelineIsometri......
  • SpringBoot项目使用 validation进行数据校验
    validation进行数据校验@Validated注解和@Valid注解都是SpringFramework中用于数据校验的注解,但它们有以下几点区别:所在包路径不同:@Valid注解位于javax.validation.constraints包下,而@Validated注解位于org.springframework.validation.annotation包下。支持......
  • 博客平台安利
    【数字空间WRITE-BUG】是一个博客平台,它为用户提供了一个高质量的写作和分享体验。在这个平台上,你可以创建自己的博客,记录生活中的点滴,与他人分享专业知识,以及展示你的创意。数字空间WRITE-BUG的特点之一是它的简洁明快的设计。平台的用户界面非常直观,易于使用,使得新手也能轻松上手......
  • 基于jQuery的FlexiGrid的插件使用和改造
    已不推荐下载,如要下载去这个连接下载最新的http://gundumw100.iteye.com/admin/blogs/545610上面的2个链接是我参考的例子虽然Flexigrid已然算是优秀,但是问题还是有?比如:1:不支持在列首添加checkbox列2:如何给行附加事件(如右键快显菜单或双击)或者在最后列添加操作列(在列的定......
  • EVPN(1)
    目录基本概念EVPN基本介绍EVPN的设计何止强悍理解路由类型EVPN启动过程EVPN原理术语基本工作流程概述三张表再看工作流程问题MPLS&EVPN实验基本概念EVPN基本介绍EVPN的全称是EthnernetVirtualPrivateNetwork,直译为“以太网虚拟私有网络”,由2015年新增的RFC7432定义,RFC7432......
  • 3月代码大全阅读笔记3
    之所以阅读这本书,是想在阅读风格较为轻松的《程序员修炼之道》之后阅读一本更细致、更严肃的“进阶”读物。第一部分打好基础第一章欢迎进入软件构建的世界软件构建的定义:包括编码与调试、单元测试、规划构建、集成等,没有给出一个明确的定义。软件构建的重要性:软件构建......