最小生成树 爱被打了一巴掌 2022-05-30 08:56 163阅读 0赞 有n个城市,m条道路,现在输入n到m的道路的长度,用最少的边将图连接,输出让图连接的最小值 这道题我研究了好长时间才把答案看明白,现在给大家分享一下 具体代码如下 #include<iostream> using namespace std; struct edge { int u; int v; int w; };//用一个结构体来保存从城市u到城市v的距离w struct edge e[10];//有小于10条路 int n,m;//定义n个城市,m条路 int f[7]={0},sum=0,count=0; void quicksort(int left,int right) { int i,j; struct edge t;//定义一个中间转换变量 if(left>right)//如果左边大于右边结束 return; i=left;//i等于左,j等于右 j=right; while(i!=j) { while(e[j].w>=e[left].w&&i<j)//e[left].w是基准数 j--;//往左走 while(e[i].w<=e[left].w&&i<j) i++;//往右走 if(i<j)//交换两个数的位置 { t=e[i]; e[i]=e[j]; e[j]=t; } } //将基准数归位 t=e[left]; e[left]=e[i]; e[i]=t; quicksort(left,i-1);//继续往左递归处理 quicksort(i+1,right);// 继续往右递归处理 return; } //查并集寻找祖先的函数 int getf(int v) { if(f[v]==v) return v; else { f[v]=getf(f[v]); return f[v]; } } //并查集合并两子集合的函数 int merge(int v,int u)//v表示出发城市,u表示到达城市 { int t1,t2; t1=getf(v); t2=getf(u); if(t1!=t2) { f[t2]=t1; return 1; } return 0; } int main() { int i;//定义一个循环变量 cin>>n>>m;//输入一共有n个城市,m条路 for(i=1;i<=m;i++) cin>>e[i].u>>e[i].v>>e[i].w;//输入从第u个城市到第v个城市的距离w quicksort(1,m);//用快速排序的方式按距离从小到大枚举出1到m条边 for(i=1;i<=n;i++)//并查集初始化 f[i]=i; //Kruskal算法核心部分代码 for(i=1;i<=m;i++)//枚举从小到大的每一条边 { //判断一条边的两个顶点是否已经连通,即判断是否在统一集合中 if(merge(e[i].u,e[i].v))//如果目前不连接,则选这条边 { count++; sum=sum+e[i].w; } if(count==n-1)//选用n-1条边,跳出循环 break; } cout<<sum<<endl;//输出最短距离 return 0; } 博主本身也是小白,希望大家在评论区分享更好的方法,大家相互学习,共同进步
相关 最小生成树 最小生成树定义: 在一给定的无向图 G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即![(u, v)\\in E][u_ v_in E]),而 末蓝、/ 2022年09月20日 15:18/ 0 赞/ 181 阅读
相关 生成树相关问题(最小生成树变形,次小生成树,最小度限度生成树,极差最小生成树) 生成树相关问题(最小生成树变形,次小生成树,最小度限度生成树,极差最小生成树) 视频:[https://www.bilibili.com/video/BV1G64y187ke Bertha 。/ 2022年09月12日 05:52/ 0 赞/ 185 阅读
相关 最小生成树 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树在n个顶点的情形下,有n-1条边。生成树是对连 忘是亡心i/ 2022年08月03日 05:28/ 0 赞/ 202 阅读
相关 最小生成树 邻接矩阵建图+prim朴素[算法][Link 1] 代码通过HDU1102 \[cpp\] [view plain][] [copy][view plain] 1. 超、凢脫俗/ 2022年06月09日 04:27/ 0 赞/ 49 阅读
相关 最小生成树 有n个城市,m条道路,现在输入n到m的道路的长度,用最少的边将图连接,输出让图连接的最小值 这道题我研究了好长时间才把答案看明白,现在给大家分享一下 具体代码如下 爱被打了一巴掌/ 2022年05月30日 08:56/ 0 赞/ 164 阅读
相关 最小生成树 设G = (V,E)是无向连通带权图,即一个网络。E中的每一条边(v,w)的权为c\[v\]\[w\]。如果G的子图G’是一棵包含G的所有顶点的树,则称G’为G的生成树。生成 红太狼/ 2022年05月24日 11:41/ 0 赞/ 252 阅读
相关 最小生成树 问题提出: 要在n个城市间建立通信联络网。顶点:表示城市,权:城市间通信线路的花费代价。希望此通信网花费代价最小。 问题分析: 答案只能从生成树中找,因为要做到任何 雨点打透心脏的1/2处/ 2022年03月18日 12:28/ 0 赞/ 270 阅读
相关 最小生成树 kruskal算法基本思路:先对边按权重从小到大排序,先选取权重最小的一条边,如果该边的两个节点均为不同的分量,则加入到最小生成树,否则计算下一条边,直到遍历完所有的边。 p ゝ一纸荒年。/ 2022年02月25日 14:20/ 0 赞/ 253 阅读
相关 最小生成树 最小生成树 什么是最小生成树 给定一张无向带权图G=(V,E,W),从中挑选出|V|-1条边,使得V中任意两点都有直接或者间接的路径 显然,最后得到的子 浅浅的花香味﹌/ 2021年12月22日 01:57/ 0 赞/ 301 阅读
相关 最小生成树 Jungle Roads [http://poj.org/problem?id=1251][http_poj.org_problem_id_1251] Descrip 逃离我推掉我的手/ 2021年11月29日 22:28/ 0 赞/ 401 阅读
还没有评论,来说两句吧...