【图论】最小生成树(python和cpp)

文章目录

  • 一、声明
  • 二、简介
  • 三、代码
    • C++代码
    • Python代码

一、声明

  • 本帖持续更新中
  • 如有纰漏望指正!

二、简介

(a)点云建立的k近邻图(b)k近邻图上建立的最小生成树

最小生成树 (Minimum Spanning Tree,简称 MST) 是一种在带权无向图中的树,它连接了图中所有节点并且总权重最小。在最小生成树中,任意两个节点之间有且仅有一条路径,同时这些路径的权重之和最小。
最小生成树的应用场景非常广泛。以下是一些常见的应用场景:

  • 网络设计:在计算机网络或通信网络中,最小生成树可以用来构建最优的网络拓扑结构,以便实现高效的数据传输和通信。
  • 物流规划:在物流管理中,最小生成树可以用来确定最短路径,从而有效地规划货物的运输路线,降低物流成本。
  • 电力传输:在电力系统中,最小生成树可以用于确定电力输电线路的布置,确保电力从发电站到各个用户点的传输成本最小。
  • 集群分析:在数据挖掘和机器学习中,最小生成树可以用于聚类分析,帮助发现数据点之间的相关性和相似性。
  • 电路板设计:在电路板设计中,最小生成树可以用来确定电路中的连接线路,以便最小化电路板的制造成本。

最小生成树算法有多种,其中最著名且常用的算法是普里姆算法(Prim’s algorithm)和克鲁斯卡尔算法(Kruskal’s algorithm),它们可以高效地找到最小生成树。

三、代码

C++代码

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/kruskal_min_spanning_tree.hpp>
#include <iostream>
#include <vector>int main() {// Define the graph using adjacency_listtypedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS,boost::no_property, boost::property<boost::edge_weight_t, int>> Graph;typedef boost::graph_traits<Graph>::edge_descriptor Edge;typedef boost::property_map<Graph, boost::edge_weight_t>::type WeightMap;// Create a graph objectGraph g;// Add edges to the graphadd_edge(0, 1, 2, g);add_edge(1, 2, 3, g);add_edge(0, 3, 1, g);// ... Add other edges as needed// Vector to store the resulting MST edgesstd::vector<Edge> spanning_tree;// Compute the minimum spanning tree using Kruskal's algorithmboost::kruskal_minimum_spanning_tree(g, std::back_inserter(spanning_tree));// Print the edges in the MSTfor (std::vector<Edge>::iterator ei = spanning_tree.begin(); ei != spanning_tree.end(); ++ei) {std::cout << source(*ei, g) << " <--> " << target(*ei, g)<< " with weight of " << get(boost::edge_weight, g, *ei) << std::endl;}return 0;
}

Python代码

import open3d as o3d
import numpy as np
import networkx as nx
from scipy.spatial import KDTreedef create_knn_graph(point_cloud, k):# Convert Open3D point cloud to numpy arraypoints = np.asarray(point_cloud.points)# Build a KDTree for efficient nearest neighbor searchtree = KDTree(points)# Create a graphG = nx.Graph()# Add nodesfor i in range(len(points)):G.add_node(i, pos=points[i])# Add edges based on k nearest neighborsfor i in range(len(points)):distances, indices = tree.query(points[i], k=k+1)  # k+1 because the point itself is includedfor j in range(1, k+1):  # Skip the first one (itself)G.add_edge(i, indices[j], weight=distances[j])return Gdef find_mst(graph):# Compute the minimum spanning treereturn nx.minimum_spanning_tree(graph)# Load point cloud
pcd = o3d.io.read_point_cloud("path_to_your_point_cloud_file.ply") # Adjust the file path# Create the kNN graph (choose your k)
k = 5  # For example, k=5
knn_graph = create_knn_graph(pcd, k)# Find the minimum spanning tree
mst = find_mst(knn_graph)# Optional: Plot the MST
pos = nx.get_node_attributes(mst, 'pos')
nx.draw(mst, pos, with_labels=True, node_size=20, font_size=8)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…

有向无权图的最短路径

在运筹学领域的经典模型中&#xff0c;最大流问题、多商品网络流问题和最短路径问题等都依附在图上对问题进行描述&#xff0c;同样&#xff0c;当我们梳理问题的数学模型&#xff0c;或理解相关问题的求解算法时&#xff0c;也要依靠它。因此&#xff0c;我将总结和图相关的问…

在Sprinng Boot中使用Redis充当缓存

关于我们使用EhCache可以适应很多的应用场景了&#xff0c;但是因为EhCache是进程内的缓存框架&#xff0c;在集群模式下&#xff0c;我们在我们的应用服务器或者云服务器之间的缓存都是独立的。故而在不同的服务器之间的进程会存在缓存不一致的情况&#xff0c;就算我们的EhCa…

flink 8081 web页面无法被局域网内其他机器访问

实现 http://localhost:8081/#/overview 可以被局域网其他机器访问

使用UART烧录N76E003AT20核心板

目录 模块简介烧录方式利用ISP对N76E003AT20核心板进行烧录ICP烧录BootloaderISP烧录程序&#xff08;UART&#xff09;测试现象 总结 模块简介 N76E003为带有flash的增强型8位8051内核微控制器&#xff08;1T工作模式&#xff09;&#xff0c;指令集与标准的80C51完全兼容并具…

ROS stm32 CAN通信

文章目录 运行环境&#xff1a;原理1.1 ros中的代码1)socketcan_bridge2)测试的ros-python包3)keil5中数据解析4)USB-CAN连接5)启动指令 运行环境&#xff1a; ubuntu18.04.melodic STM32&#xff1a;DJI Robomaster C板 ROS&#xff1a;18.04 硬件&#xff1a;USB-CAN&#x…

基于 Amazon EKS 搭建开源向量数据库 Milvus

一、前言 生成式 AI&#xff08;Generative AI&#xff09;的火爆引发了广泛的关注&#xff0c;也彻底点燃了向量数据库&#xff08;Vector Database&#xff09;市场&#xff0c;众多的向量数据库产品开始真正出圈&#xff0c;走进大众的视野。 根据 IDC 的预测&#xff0c;…

入门后端开发得学什么?这份超详细的后端开发学习路线图值得推荐!

后端开发, 无疑是一个极为关键的领域&#xff0c;涉及到我们每日互联网生活的每个细节。每当你在网上浏览、搜索或进行购物等活动时&#xff0c;背后都有大量的后端技术作为支撑。而随着技术的日益进步&#xff0c;人们对于高效、稳定和安全的网络服务的需求也越来越高。 另一…

Docker-minio部署

1.创建目录 创建文件目录&#xff0c;用来存放配置和上传文件目录 &#xff08;1&#xff09;Minio 外部挂载的配置文件(/mydata/minio/config) &#xff08;2&#xff09;存储上传文件的目录(/mydata/minio/data) mkdir -p /home/minio/config mkdir -p /home/minio/data2.拉…

解决计算机丢失msvcr71.dll问题,总结5种解决方法分享

由于各种原因&#xff0c;计算机在使用的过程中可能会出现一些问题&#xff0c;其中之一就是丢失msvcr71.dll文件。这个问题可能会导致计算机无法正常运行某些程序或功能&#xff0c;给我们的生活和工作带来困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何解决…

微星迫击炮b660m使用intel arc a750/770显卡功耗优化方法

bios 优化: 1,开机后持续点击“delete”键直到进入微星bios。 2,点击右上角选择我们熟悉的中文。 3,点击Settings--->高级---> pcie/Pci子系统设置 4,Native PCIE Enable : Enabled Native Aspm:允许

2—10岁女童羽绒服,黑色长款也太好看了吧

冬天怎么能没有一件暖呼呼的羽绒服呢&#xff1f; 黑色长款羽绒服也赞了吧 大长款连帽&#xff0c;防风保暖设计 时尚与美观度都兼具呢&#xff01;好穿又耐穿&#xff01;

【EI会议征稿】第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024)

第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) The 3rd International Academic Conference on Blockchain, Information Technology and Smart Finance 第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) 将于2024年2月23-25日在马来西亚举行。本次会…

【计算机网络笔记】DHCP协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

关于400G光模块的常见问题解答

最近在后台收到了很多用户咨询关于400G光模块的信息&#xff0c;那400G光模块作为当下主流的光模块类型&#xff0c;有哪些问题是备受关注的呢&#xff1f;下面来看看小易的详细解答&#xff01; 1、什么是400G QSFP-DD光模块&#xff1f; 答&#xff1a;400G光模块是指传输速…

三、Eureka注册中心

目录 一、作用及调用方式 二、搭建eureka注册中心 三、注册user-service和order-service 四、新增实例 五、服务拉取 六、总结 一、作用及调用方式 在服务提供者启动时&#xff0c;它会向eureka注册中心提供自己的信息&#xff0c;并每30秒进行一次刷新eureka注册中心保存…

bat随手记

目录 bat批处理常用命令查询有哪些reg命令&#xff0c;帮助信息——reg /?查询注册表信息——reg query /?切换到批处理文件目录——cd /d "%~dp0"永久设置环境变量——setx命令设置注册表内容——/v名称&#xff0c;/t类型&#xff0c;/d数据%cd%和%~dp0的区别/f没…

数据库测试的认知和分类详解

现在的软件系统&#xff0c;尤其是业务应用系统&#xff0c;后台都连接着一个数据库。数据库中存储了大量的数据&#xff0c;数据库的设计是否合理和完善&#xff0c;SQL语句编写是否正确、高效&#xff0c;都直接影响了一个软件系统的功能正确性和性能表现。今天跟大家分享一些…

metinfo 6.0.0 任意文件读取漏洞复现

metinfo 6.0.0 任意文件读取漏洞复现 漏洞环境 环境为mrtinfo 6.0.0 漏洞存在的位置 通过代码审计发现在源代码的/app/system/include/module/old_thumb.class.php这个位置有着任意读取文件漏洞 漏洞点:http://127.0.0.1/metinfo_6.0.0//include/thumb.php 漏洞复现 访…

efcore反向共工程,单元测试

1.安装efcore需要的nuget <PackageReference Include"Microsoft.EntityFrameworkCore" Version"6.0.24" /> <PackageReference Include"Microsoft.EntityFrameworkCore.SqlServer" Version"6.0.24" /> <PackageRefere…