最小生成树 -prim算法

news/2024/7/15 17:30:16 标签: 图论, 算法
  1. 一般无向图
  2. 建图
  3. 稠密图-prim算法
  4. 稀疏图-kruskal算法
  5. 在这里插入图片描述
    prim : 加点法
    1.先随机选一个点,加入集合 ,之后寻找最短的距离的点加入集合,行程最小生成树。
    2.注意最小生成树是不能有回路的, 所以可以把回路设置成最大值,即假装不存在。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

const int N = 510;
int n;
int g[N][N], dist[N]; //dist 表示此点到集合的距离 

bool vis[N];

int res;

bool prim(){
    memset(dist, 0x3f,sizeof dist);
    
    
    
    for(int i = 0; i < n; i++){
        int t = -1;
        
        for(int j = 1; j <= n; j++){
            if(!vis[j] && (t == -1 || dist[t] > dist[j])){
                t = j;
            }
        }
        
        vis[t] = true;
        
        // cout<<dist[t] << " "<< t<< '\n';

        
        //不存在最小生成树
        if(i && dist[t] == 0x3f3f3f3f){
            return false;
        }
        
        
        if(i) res+= dist[t];
        
        
        
        for(int j = 1; j <= n; j++){
            dist[j] = min(dist[j], g[t][j]);
        }
    }
    
    return true;
}



int main(){
    
    int m;
    cin>>n>>m;
    int u,v,w;
    memset(g, 0x3f, sizeof g);
    for(int i = 0; i < m; i++){
        cin>>u>>v>>w;
        if(u != v){
            g[u][v] = g[v][u] = min(g[u][v],w);
        }
    }
    
    bool ans = prim();
    
    if(ans){
        cout<<res<<'\n';
    }else cout<<"impossible" << '\n';
    
    
    return 0;
}

http://www.niftyadmin.cn/n/4988113.html

相关文章

【UniApp开发小程序】小程序私聊页面完善(仿微信带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】

文章目录 说明仿微信带尾巴聊天气泡组件效果展示组件整体代码气泡主体气泡尾巴 使用 私聊页面滑动到顶部获取历史数据页面整体代码 说明 之前已经在【UniApp开发小程序】私聊功能uniapp界面实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】这篇文章中介绍了私聊页…

一文看懂DETR(二)

训练流程 1.输入图像经过CNN的backbone获得32倍下采样的深度特征&#xff1b; 2.将图片给拉直形成token&#xff0c;并添加位置编码送入encoder中&#xff1b; 3.将encoder的输出以及Object Query作为decoder的输入得到解码特征&#xff1b; 4.将解码后的特征传入FFN得到预测特…

Docker技术--Docker镜像仓库构建

1.概述 我们之前在使用Docker的镜像的时候,是直接从官方网站的位置拉取并下载,但是有的时候,无法避免的存在一些安全性的问题,为了安全起见,我们有必要构建自己的镜像仓库。下面介绍两种常用的docker镜像仓库的构建方法。 2.Docker镜像仓库的类型 镜像仓库(Docker Regis…

笔试题-String字符串创建对象的数量

package com.xch.test02;/*** 笔试题复盘* String字符串创建对象的数量* * 其中&#xff0c;* 1、常量池ConstantPool对象在程序运行时就会在堆中&#xff0c;会带有一些启动环境的常量* 2、常量池中可以有多种常量&#xff0c;如&#xff1a;String、Integer、Character…* 3、…

手工测试与自动化测试各自的优势和局限性是什么?如何合理地配合使用?

对测试从业者而言&#xff0c;手工测试和自动化测试是伴随测试职业一生的两个名词。今天&#xff0c;我们就来聊聊两者各自的优势和局限性&#xff0c;以及如何合理地配合使用。 手工测试和自动化测试的定义 手工测试&#xff08;Manual Testing&#xff09;是一种软件测试方法…

【LeetCode - 每日一题】1654. 到家的最少跳跃次数(23.08.31)

1761. 一个图中连通三元组的最小度数 题意 寻找所有的连通三元组返回连通三元组的最小度 code - 1 BFS 一开始的想法是使用 bfs&#xff0c;只要层次遍历三层即可。但是用递归写法会超时&#xff0c;后改成递推写法&#xff0c;注意&#xff1a; 要存储第二层的点。我直接…

Python飞机大战小游戏

游戏规则&#xff1a;键盘上下左右键控制飞机移动 游戏展示图片&#xff1a; 源码&#xff1a; 第一个py命名为&#xff1a;plane_main.py import pygamefrom plane_sprites import *class PlaneGame(object):# """飞机大战主游戏"""def __in…

script标签中defer和async的区别

默认情况下&#xff0c;script脚本会阻塞文档的解析渲染 浏览器解析文档时&#xff0c;默认是按照排列顺序向下解析的&#xff0c;当遇到script标签时&#xff0c;和其他标签元素一样&#xff08;例如一个div&#xff09;&#xff0c;会先解析该元素&#xff08;脚本&#xff…