最小连通-(代码、分析、汇编)

目录:

    • 介绍:
    • 代码:
    • 分析:
    • 汇编:

介绍:

一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,
并且有保持图连通的最少的边。
最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出

普利姆算法,图论中一种算法,可在加权连通图里搜索最小生成树。
此算法搜索到的边子集所构成的树中,不但包括连通图里的所有顶点,且所有边的权值最小

代码:

#include <stdio.h>
#include <stdlib.h>/*
程序描述:
矩阵有多行数据,cost数组从矩阵中提取数据,P记录cost数组的数据分别属于矩阵的哪一行
Mark记录在cost不再进行比较数据的下标(已经是最小值当前cost中最小值的下标了)
在cost数组中找出最小值与其在cost中的下标,再将该下标在mark中标记,下次不再处理这个位置
当前cost比较完成后,用找到的最小值作为下一行要提取数据的行号,然后用该行的数据与cost中的数据
比较,取每个位置较小值,除了已经标记的位置不进行提取。并修改P中对应较小值属于行
更新cost和P后,再进行在cost中找最小值同样的操作,依次循环整个矩阵
*/#define VNUM 9
#define MV 65536int P[VNUM];//存储要当前比较的数据是属于哪一行的
int Cost[VNUM];//要用于比较的数据的数组
int Mark[VNUM];//记录列状态,标记为1的列,将不再处理比较
int Matrix[VNUM][VNUM] =    //n行与n列数据一样的矩阵
{{0, 10, MV, MV, MV, 11, MV, MV, MV},{10, 0, 18, MV, MV, MV, 16, MV, 12},{MV, 18, 0, 22, MV, MV, MV, MV, 8},{MV, MV, 22, 0, 20, MV, MV, 16, 21},{MV, MV, MV, 20, 0, 26, MV, 7, MV},{11, MV, MV, MV, 26, 0, 17, MV, MV},{MV, 16, MV, MV, MV, 17, 0, 19, MV},{MV, MV, MV, 16, 7, MV, 19, 0, MV},{MV, 12, 8, 21, MV, MV, MV, MV, 0},
};
//cost 先取第一行的数据开始比较
void Prim(int sv) // O(n*n)
{int i = 0;int j = 0;if( (0 <= sv) && (sv < VNUM) )//判断sv在矩阵范围内{for(i=0; i<VNUM; i++){Cost[i] = Matrix[sv][i];//将sv行所有列赋到cost,表示从sv行的数据开始处理比较P[i] = sv;//将P全部赋0,表示当前所有数据属于0行的Mark[i] = 0;//Mark数组全赋0,初始化}Mark[sv] = 1;//将0列设为1,刚开始0列不处理比较for(i=0; i<VNUM; i++){int min = MV;int index = -1;for(j=0; j<VNUM; j++){//从没有被标记数据中取值,找出cost(当前要比较的数据)中最小值和其在cost中的下标if( !Mark[j] && (Cost[j] < min) ){min = Cost[j];//给最小值赋值  index = j;//最小值的下标  }}if( index > -1 )//表示执行了上面,找到了最小值{Mark[index] = 1;  //将该下标进行标记,下次不再比较该列的数据printf("(%d, %d, %d)\n", P[index], index, Cost[index]); // 输出这次查找出最小值位于的行与下标与数值}for(j=0; j<VNUM; j++) //循环找出下一次用比较的数据{//从上次找到的最小值的下标,作为重新提取数据的行//只要不是被标记的列,从行中提取的数据比原来比较的数据小就取行中的数和下标//也用新的一行中的数据与本来用于比较的数据取对应位置较小的一方,并将该位置的值属于//哪一行中提取出来的,存到P中if( !Mark[j] && (Matrix[index][j] < Cost[j]) ) //更新到cost数组{Cost[j]  = Matrix[index][j];//更新用来比较数据数组P[j] = index;//更新数据属于的行}}}}
}int main(int argc, char *argv[]) 
{Prim(0);getchar();return 0;
}

分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汇编:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

c++ 怎样连接两个链表_LeetCode | 链表的入口,一文帮你搞定“环形链表”(python版,最简单解析)...

链表节点的定义链表作为一种数据结构&#xff0c;由链表节点互相连接构成。链表节点包含自身的数据和一个指向下一节点的指针。""" Definition of ListNode """ class ListNode(object):def __init__(self, val, nextNone):self.val valself.ne…

QI实例-改变空间参考

学习AE一段时间了&#xff0c;总是对QI不是很理解&#xff0c;今天一晚上写了QI实例&#xff0c;尝试理解下。 首先想到的是→改变空间参考→alter、SpatialReference→alterSpatialReference&#xff0c;输入到帮助文档里。  查看是IGeoDatasetSchemaEdit接口的方法&#xf…

C#省市二级联动(王者荣耀挑选英雄为例)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace beyond_联动_ {public partial clas…

二叉排序树(Binary Sort Tree) 又称为二叉查找树(Binary Search Tree) - (代码、分析)

目录&#xff1a;代码&#xff1a;分析&#xff1a;代码&#xff1a; BSTree.h #ifndef _BSTREE_H_ #define _BSTREE_H_typedef void BSTree;//定义二叉树类型 typedef void BSKey;//定义节点的键值类型&#xff08;用于节点排序&#xff09;typedef struct _tag_BSTreeNode …

springboot tomcat默认线程数_记一次JAVA线程池的错误用法

最近项目一个项目要结项了&#xff0c;但客户要求 TPS 能达到上千&#xff0c;而用我写的代码再怎么弄成只能达到 30 的 TPS&#xff0c;然后我又将代码中能缓存的都缓存了&#xff0c;能拆分的也都拆分了&#xff0c;拆分时用的线程池来实现的&#xff1b;其实现的代码主要为…

引以为鉴-ARM开发板连线注意事项

前些日子把实验室的三台机子放到一个工位上&#xff0c;非常拥挤&#xff0c;做实验也很不方便。因此&#xff0c;想把ARM开发板的环境重新搭建到自己的电脑上。说完就做&#xff0c;上午就开始忙活起来。把开发板上的USB线、串口线、JTAT接口、还有电源线一一插好。接着就开始…

Python---实验八

1&#xff0c;现在有一份‘邀请函.txt’的空白文件&#xff0c;请在同级目录下编写一段代码&#xff0c;写入内容‘诚挚邀请您来参加本次宴会’。 with open(fG:\study\Python\邀请函.txt,modew,encodingutf-8) as y:y.write(诚挚邀请您来参加本次宴会)效果图如下&#xff1a;…

哈希表 - (代码、分析 )

目录&#xff1a;代码&#xff1a;分析&#xff1a;代码&#xff1a; BSTree.h BSTree.c 二叉排序树(Binary Sort Tree) 又称为二叉查找树(Binary Search Tree) Hash.h #ifndef _HASH_H_ #define _HASH_H_typedef void Hash;//定义哈希表类型 typedef void HashKey;//定义哈…

scala spark 数据对比_IT大牛耗时三个月总结出大数据领域学习路线,网友评论:炸锅了...

大数据不是某个专业或一门编程语言&#xff0c;实际上它是一系列技术的组合运用。有人通过下方的等式给出了大数据的定义。大数据 编程技巧 数据结构和算法 分析能力 数据库技能 数学 机器学习 NLP OS 密码学 并行编程虽然这个等式看起来很长&#xff0c;需要学习的东…

Python---实验九作业

1&#xff0c;使用tkinter实现计算器程序。实现效果如下&#xff1a; from tkinter import * from tkinter.ttk import *def frame(master):"""将共同的属性作为默认值, 以简化Frame创建过程"""w Frame(master)w.pack(sideTOP, expandYES, fill…

用pv操作描述如下前驱图_LinkedList实现分析(二)——常用操作

上一篇文章LinkedList实现分析(一)——LinkedList初探与对象创建介绍了LinkedList中的一些重要属性和构造方法&#xff0c;下面我们将详细介绍一下LinkedList提高的常用方法的实现原理元素添加###add(E e)方法往LinkedList添加元素&#xff0c;LinkedList提供了多重方式&#x…

C++多重继承与虚基类及与.NET的比较

多重继承前面我们介绍的派生类只有一个基类&#xff0c;称为单基派生或单一继承。在实际运用中&#xff0c;我们经常需要派生类同时具有多个基类&#xff0c;这种方法称为多基派生或多重继承。2.1 多重继承的声明&#xff1a;在 C 中&#xff0c;声明具有两个以上基类的派生类与…

平院实训门禁系统导入

这是我的配置&#xff08;如果是Win10最好每一步都管理员身份运行&#xff09; win7 SQLServer2008 VS2012 切记&#xff1a;注意&#xff1a;当你SQLserver创建数据库和VS连接数据库的时候得用同一种方式&#xff0c;要么都用window&#xff08;主机名&#xff09;&#xff0…

北京中信银行总行地址_中信银行拉萨分行举行“存款保险标识”启用和存款保险条例宣传活动...

11月NOV中信银行拉萨分行举行“存款保险标识”启用和《存款保险条例》宣传活动揭牌启用仪式111月Jul根据人民银行和总行关于“存款保险标识”启用工作相关要求&#xff0c;分行行领导高度重视“存款保险标识”启用和《存款保险条例》宣传活动工作&#xff0c;按照统一工作部署、…

转整型_156.Ruby烘焙大理石豆沙吐司解锁大理石花纹整型

好看又好吃的大理石豆沙面包。红豆馅均匀分布在松软细腻的面包体里&#xff0c;手撕着吃&#xff0c;一层层的甜美与温柔&#xff5e;关于吐司面包&#xff0c;我公众号里写过白吐司(基础款牛奶吐司&#xff0c;超绵鲜奶油吐司)和全麦吐司(基础款50%全麦吐司&#xff0c;经典燕…

VS2010 快捷键 (空格显示 绿点, Tab 显示箭头)

VS2010 有用的快捷键 &#xff1a; Ctrl r, ctrl w, 切换空格示。 转载于:https://www.cnblogs.com/fengye87626/archive/2012/11/21/2780716.html

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 这两个box信息

分析一下mp4格式的trak -> mdia -> minf -> stbl -> stts、stsc 这两个box信息 &#xff08;因为这两个box在音频trak和视频trak 下都有的&#xff0c;而且都有一个数组的值是比较绕的&#xff09; 目录&#xff1a;stts&#xff1a;记录时间戳的&#xff0c;每个s…

Python---爬虫案例

例1、爬取公众号文章中的图片。 1&#xff0c;首先打开要获取公众号文章的地址 2&#xff0c;按下F12&#xff0c;再按Ctrl Shift C&#xff0c;然后鼠标移动到图片位置&#xff0c;然后观察控制台中显示图片对应的代码位置 3&#xff0c;分析该位置的代码段 代码段如下&…

Python---实验九

1、使用标准库urllib爬取“http://news.pdsu.edu.cn/info/1005/31269.htm”平顶山学院新闻网上的图片&#xff0c;要求:保存到F盘pic目录中&#xff0c;文件名称命名规则为“本人姓名” “_图片编号”&#xff0c;如姓名为张三的第一张图片命名为“张三_1.jpg”。 from re imp…

32接上拉5v_51单片机P0口上拉电阻的选择

作为I/O口输出的时候时&#xff0c;输出低电平为0 输出高电平为高组态(并非5V&#xff0c;相当于悬空状态&#xff0c;也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流&#xff0c;因此必须接(一电阻连接到VCC)&#xff0c;由电源通过这个上拉电阻给负载提供电流。P…