实验五 网络中的树

文章目录

  • 5.1 网络中的树
    • 第一关 认识树
      • 相关知识
      • 编程要求
      • 代码文件
    • 第2关 根节点的二阶邻居求解方法
      • 相关知识
      • 编程要求
      • 代码文件
    • 第3关 根节点的n阶邻居求解方法
      • 相关知识
  • 5.2 权值矩阵与环(无向网络)
    • 第1关 无向网络的权值矩阵
      • 相关知识
      • 编程要求
      • 代码文件
    • 第2关 无向网络中环的判定一
      • 相关知识
      • 编程要求
    • 第3关 无向网络中环的判定二
      • 相关知识
      • 编程要求
      • 代码文件

5.1 网络中的树

第一关 认识树

相关知识

一个包含N个节点的连通图G至少含有N-1条边,如果这个连通图恰好只有N-1条边,那么这个图就可以看做是最简单的连通图,我们称之为树(tree)。一个包含了N个节点的无向图G称为一棵树,当且仅当它满足如下任意一个条件:

  • 图G是连通的并且有N-1条边;
  • 图G是连通的并且不包含圈;
  • 图G不包含圈并且有N-1条边;
  • 图G中任意两个顶点之间有且仅有一条路径
  • 图G中任意一条边都是桥,即去掉图G中任意一条边都会使图变得不连通

编程要求

  • 根据下图所示的树型网络,理清节点间连接关系及其方向权重信息;
  • 再将对应的邻接矩阵G、邻接链表edges以及关联矩阵M在程序空白处输入,元素间请以空格作为间隔;
  • 将得到的邻接矩阵G、邻接链表edges以及关联矩阵M由disp命令完成。

在这里插入图片描述

代码文件

%Output the G, edges and M, respectively.
G = [0 1 1 1 0 1;1 0 0 0 0 0;1 0 0 0 0 0;1 0 0 0 1 0;0 0 0 1 0 0;1 0 0 0 0 0];
edges = [1 2;1 3;1 4;4 5;1 6];
M = [1 1 1 1 0;1 0 0 0 0;0 1 0 0 0;0 0 1 0 1;0 0 0 0 1;0 0 0 1 0];
disp(G);
disp(edges);
disp(M);

第2关 根节点的二阶邻居求解方法

相关知识

首先在这样一棵树中,我们以节点1作为树的根节点,然后我们每次在向量a中存放已搜索到的根节点邻居,a_temp存放当前搜索到的新邻居。我们知道树的邻接矩阵中非零元素代表节点之间存在连边,那么我们首先定位到邻接矩阵根节点1对应的行,使用find命令找出该行的非零元素位置,并将其存放在向量a_temp中。

a_temp = find(G(1,:));

其中G(1,:)代表邻接矩阵G中第一行的所有元素,利用find命令便可以找出第一行中所有的非零元素的索引值,我们可以看到,根节点1的一阶邻居为节点2,3,4,6。然后我们再以for循环遍历这四个节点的一阶邻居,与根节点一阶邻居不重合的节点便是根节点的2阶邻居。

a = a_temp;
l = length(a_temp);
neighbor = [];
for i = 1:l;
    a_temp = find(G(a(i),:));
    neighbor = union(setdiff(a_temp,a),neighbor);
end

我们首先是求出一阶邻接的数目,然后利用for循环,遍历根节点的每一个一阶邻居,将其二阶邻居节点与已求得的一阶邻居取差集setdiff,便能准确求出专属于二阶邻居的所有节点。

neighbor = setdiff(neighbor,1);
disp(neighbor);

编程要求

在这里插入图片描述

代码文件

%Output the neighbor.
G = [0 1 1 1 0 0 0 0;1 0 0 0 1 1 0 0;1 0 0 0 0 0 1 0;1 0 0 0 0 0 0 1;0 1 0 0 0 0 0 0;0 1 0 0 0 0 0 0;0 0 1 0 0 0 0 0;0 0 0 1 0 0 0 0];
a_temp = find(G(1,:));
a = a_temp;
%disp(a_temp); 输出2 3 4
l = length(a_temp);
neighbor = [];
for i = 1:l;
    a_temp = find(G(a(i),:));
    neighbor = union(setdiff(a_temp,a),neighbor);
end
neighbor = setdiff(neighbor,1);
disp(neighbor);

第3关 根节点的n阶邻居求解方法

相关知识

先求出树型网络的二阶邻居,如下所示:

a = a_temp;
l = length(a_temp);%计算根节点一阶邻居的数目
neighbor = [];
for i=1:l
    a_temp = find(G(a(i),:));
    neighbor = union(setdiff(a_temp,a),neighbor);
end

现在讲所求得的邻居节点存入一个临时变量,然后继续遍历二阶邻居的邻居节点,即根节点的三阶邻居,再与临时变量求一个差集即可求得根节点的三阶邻居节点。首先在这样一棵树中,我们以节点1作为树的根节点,然后我们每次在向量a中存放已搜索到的根节点邻居,a_temp存放当前搜索到的新邻居,而不包含前序搜索节点的邻居节点存放在neighbor中。使用find命令找出该行的非零元素位置,并将其存放在向量a_temp中。其中G(a_location(i),:)代表邻接矩阵G中与当前搜索的邻居节点相关的矩阵行中的所有元素,利用find命令便可以找出第一行中所有的非零元素的索引值,然后我们再以for循环遍历这几个节点的一阶邻居,与上一阶节点不重合的节点便是根节点的下一阶阶邻居,求取不重合的节点集我们采用setdiff差集命令,便可最终得到根节点的n阶邻居,如下:

n = 3;%设定根节点的n阶邻居
a = [1];%a为搜索到的节点集合,初始化搜索到的节点集合
a_num = 1;%初始化搜索到的节点数目
neighbor = [];%初始化邻居
k = 1;%循环的控制参数初始化
l = 1;%初始化下一步需要搜索的邻居节点数目
a_location = a;%搜索的定位向量
while k ~= (n+1)
	neighbor = [];
	for i = 1:l
		a_temp = find(G(a_location(i),:));%搜索上一阶邻居的所有相邻节点
		neighbor = union(setdiff(a_temp,a),neighbor);%与当前已搜索到的所有节点取差集,即得到当前阶次的邻居
	end
	a = union(neighbor,a);%更新搜索到的节点集合
	l = length(neighbor);%更新下一步需要搜索的邻居节点数目
	a_location = neighbor;%更新定位向量
	k = k+1;%更新循环的控制参数
end

5.2 权值矩阵与环(无向网络)

第1关 无向网络的权值矩阵

相关知识

编程要求

  • 根据下图所示网络图,理清节点间连接关系及其方向权重信息;
  • 再将对应的权值矩阵在程序空白处输入,元素间请以空格作为间隔;
  • 将得到的权值矩阵由disp命令完成。

在这里插入图片描述

代码文件

%Output matrix to A.
A = [0 0 0 0 0;1 0 0 1 0;0 5 0 0 6;0 0 4 0 0;0 0 0 0 0];
disp(A);

第2关 无向网络中环的判定一

相关知识

邻接矩阵每个元素的含义就是如果节点对之间有连边则对应位置的元素值为1,所以我们只需要计算邻接矩阵所有行中非零元素为1的行,便能很快锁定相关节点并进行删除。

sum (G);
a = find(sum(G) == 1);

接下来便是删除操作,如下所示,我们首先计算变量a中节点的数目,利用for循环对选中的节点利用****G(a(i),:)=[]和 G(:,a(i))=[]****指令进行逐一的行列删除。

l=length(a); %如果不止一个节点只含有一条边,求取该类节点的数目
for i=1:l
    G(a(i),:)=[]; %删除节点的对应行
    G(:,a(i))=[]; %删除节点的对应列
end

最后我们再判断是否还有节点只含有一条边,将上面的代码进行整理并加入while循环来控制算法是否终止,因为在实际问题中,网络规模往往很大,所以不可能剥除一次就能将网络中所有只含一条边的节点删除,有可能在一次剥除之后,会产生新的只含一条边的节点,如下图所示,每次循环结束后,用sum计算一次矩阵中是否存在按列求和值为1的节点,如果有则继续进行循环操作,如果没有,则满足算法终止条件,用setdiff差集命令输出环中的节点。

编程要求

  • 根据下图所示网络图,理清节点间连接关系及其方向权重信息;
  • 再将对应的邻接矩阵矩阵在程序空白处输入,元素间请以空格作为间隔;
  • 利用本关卡所学的指令求解网络中环所包含的节点,并存入round;
  • 将得到的环中节点由disp命令完成。
    在这里插入图片描述

第3关 无向网络中环的判定二

相关知识

如果一个网络含有环,其总的边数肯定是大于或者等于节点数目,即m>=n,那么我们其实只需要求出网络中的边数与节点数目,便能轻松判定网络中是否存在环。
利用size命令求出网络的尺寸,由于无向网络邻接矩阵是对称矩阵,所以其网络尺寸也就是节点数目,然后利用triu命令求网络的上三角矩阵,再对其整体求和,便能得到边数。我们可以发现边数5=节点数5,说明网络中含环。

编程要求

  • 根据下图所示网络图,理清节点间连接关系及其方向权重信息;
  • 再将对应的邻接矩阵矩阵在程序空白处输入,元素间请以空格作为间隔;
  • 利用本关卡所学的指令求解网络中节点与边的数目;
  • 利用if语句判断是否存在环,如果存在则输出1,不存在则输出0,并将结果由disp命令输出。

在这里插入图片描述

代码文件

A = [0 1 1 0 0 0 0;1 0 0 0 1 0 0;1 0 0 1 0 1 0;0 0 1 0 0 0 0;0 1 0 0 0 1 0;0 0 1 0 1 0 1;0 0 0 0 0 1 0];
n = size(A,1);
A1 = triu(A);
m = sum(A1);
m = sum(m);
if m == n
    disp(1);
end
if m ~= n
    disp(0);
end

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTFHUB-SQL注入-Cookie注入

由于本关是cookie注入,就不浪费时间判断注入了,在该页面使用 burp工具 抓包,修改cookie后面,加上SQL语句,关掉burp抓包,就可以在题目页面显示结果了 判断字段数量 发现字段数量是2列 使用id-1 union sele…

Linux3(进程 编辑文件 用户管理 网络)

目录 一、进程管理 一些命令 1. ps 当前的用户进程 VSZ (Virtual Set Size) RSS (Resident Set Size) 2. kill 进程杀死命令 3. top 查看进程的信息 4. 操作系统负载查看 进程划分 进程的挂起 二、编辑文件 1. Vim编辑器 2. Vim的模式 2.1 一般模式下的操作 …

3d数字家居展馆线上制作工具更具创意

立足于引领未来展览新潮流的出发点,深圳华锐视点3D云展厅依托前沿的Web3D技术和vr全景制作技术,提供Web3D在线创意展厅搭建编辑器,为您打造一个突破时空限制、风格多样的线上展厅。 Web3D在线创意展厅搭建编辑器将您的产品以三维模型的形式生…

React 渲染函数render、初始化函数、更新函数运行了两次,原因为何,如何解决? React.StrictMode

文章目录 Intro官网解释解决另一篇官网文章——初始化函数或更新函数运行了两次 Intro 我在用 react 写一个 demo ,当我在某个自定义组件的 return 语句之前加上一句log之后,发现:每次页面重新渲染,该行日志都打印了两次&#xf…

Android Jetpack Compose入门教程(二)

一、列表和动画 列表和动画在应用内随处可见。在本课中,您将学习如何利用 Compose 轻松创建列表并添加有趣的动画效果。 1、创建消息列表 只包含一条消息的聊天略显孤单,因此我们将更改对话,使其包含多条消息。您需要创建一个可显示多条消…

开个技术外挂 | 数字孪生技术如何成为美洲杯帆船赛成功的关键?

若您对数据分析以及人工智能感兴趣,欢迎与我们一起站在全球视野关注人工智能的发展,与Forrester 、德勤、麦肯锡等全球知名企业共探AI如何加速工业变革,共享众多优秀行业案例,开启AI人工智能全球新视野!! …

CPN Tools学习——时间和队列【重要】

-Timed Color Sets 时间颜色集 -Token Stamps 令牌时间戳 -Event Clock 全局/事件/模拟时钟 -Time Delays on Transitions过渡的时间延迟 - List Color Set列表颜色集 - Queue排队 1.时间颜色集 在定时CPN模型令牌中有: (1)象征性的颜…

嵌入式作业7

1、2个或以上同学相互连接,利用CAN通信,向对方发送带有本人姓名的信息。连线方式:按基本原理性电路(不带收发器芯片)连接,参考教材图10-1。 2、在ADC实验中,结合热敏电阻,分别通过触…

Photoshop 2024 mac/win版:探索图像处理的全新境界

Photoshop 2024是Adobe推出的最新图像处理与设计软件,它在继承了前作所有优秀特性的基础上,实现了多个方面的质的飞跃。这款软件凭借其卓越的图像处理性能、丰富的创意工具以及精确的选区编辑功能,成为了图像处理领域的佼佼者。 Photoshop 2…

UEditor文件上传超出大小限制修改无效问题

网上说的方法,试过了,不生效 百度ueditor富文本编辑框怎么设置上传图片大小限制_umeditor 控制图片上传不得超过1m-CSDN博客 直接修改此处

探索未来边界:前沿技术引领新纪元

目录 引言 一、人工智能与深度学习:智慧生活的引擎 1.医疗应用 2.智能家居 3.自动驾驶 二、量子计算:解锁宇宙的密钥 1.量子比特示意图 2.量子计算机实物图 3.分子模拟应用 三、生物技术:生命科学的革新 1.CRISPR-Cas9基因编辑图 2.合成生…

史上最全盘点:一文告诉你什么是erp?erp系统厂商分别有哪些?

✅ 什么是ERP? ERP是Enterprise Resource Planning(企业资源计划)的简称,ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(资金流)、信息资…

智能家居建材,打造未来家居生活

智能家居建材,正引领着家居行业的新潮流。它融合了先进的科技与人性化的设计,为我们打造了一个充满未来感的家居新体验。 想象一下,当你走进家门,智能门锁自动识别你的身份,轻轻一推即可进入。室内环境自动调节到最舒适…

正大国际期货:小小的钱如何在期货市场翻身?

小小的钱 ,莫名喜感→在小小的花园里面哇呀哇呀挖 有可能性,因为有杠杆所以收益大,同时风险亏损起来也快,,所以必须用小亏损换大收益,,比如跌过这个位置就止损退出(永远在低点附近买…

SQL聚合函数---汇总数据

此篇文章内容均来自与mysql必知必会教材,后期有衍生会继续更新、补充知识体系结构 文章目录 SQL聚集函数表:AGV()count()根据需求可以进行组合处理 max()min()max()、min()、avg()组…

江协科技51单片机学习- p4 点亮一个LED灯

前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用: 51单片机入门教程-2…

vue2文件下载和合计表格

vue2文件数据不多可以直接下载不需要后端的时候 1.首先&#xff0c;确保你已经安装了 docx 和 file-saver 库 npm install file-saver npm install docx file-saver2.全部代码如下 <template><a-modaltitle"详情"width"80%"v-model"visi…

【x264】变换量化模块的简单分析

【x264】变换量化模块的简单分析 1. 变换量化1.1 变换&#xff08;transform&#xff09;1.2 量化&#xff08;quant&#xff09; 2. 编码入口&#xff08;x264_macroblock_encode&#xff09;2.1 内部编码&#xff08;macroblock_encode_internal&#xff09;2.1.1 SKIP模式2.…

CSS 字体颜色渐变

CSS 字体颜色渐变 css 代码: 注意&#xff1a;background: linear-gradient&#xff08;属性&#xff09;&#xff0c;属性可以调整方向 例如&#xff1a;to bottom 上下结构&#xff0c;to right 左右结构font-family: DIN, DIN;font-weight: normal;font-size: 22px;color:…

索尼cfa卡格式化了怎么恢复数据?这2种方法请收好

在摄影和视频制作领域&#xff0c;索尼CFA卡作为一种高性能的存储介质&#xff0c;深受专业用户的喜爱。然而&#xff0c;有时我们可能会不小心对CFA卡进行格式化操作&#xff0c;导致重要数据丢失。当面对这种情况时&#xff0c;许多用户会感到焦虑和困惑。本文将介绍索尼CFA卡…