深度优先搜索算法及其matlab程序详解

 #################本文为学习《图论算法及其MATLAB实现》的学习笔记#################

深度优先搜索算法(DepthFirst Search),简记DFS算法,是图论中的首要算法,其思想方法渗透到图论中的许多算法之中,尤其是DFS算法在求生成树、割点、块和平面图嵌入算法中起着极为关键的作用。

算法用途

DFS算法的MATLAB实现

算法思想

①标记一切边“未用过”,对任意顶点v\in V(G),k(v) \leftarrow 0。令i \leftarrow 0,v \leftarrow s

i \leftarrow i+1,k(v)\leftarrow i

③若v没有“未用过”的关联边,转⑤。

④ 选一条“未用过”的与v关联的边e=vu,标记 e“用过”。若k(u)\neq vu,转③;否则f(u)\leftarrow v,v\leftarrow u,转②。

⑤ 若 k(v)=1,停止。

v\leftarrow f(v),转③。
其中,上述中的k(v)称为顶点υ的DFS编码;f(u)称为顶点v的父,称为f(v)的子,且以 f(v)为始点、为终点的有向边称为父子边
根据上述DFS算法,易知该算法的复杂度为O(|E|),并得出定理4.19,由此可见,用DFS算法可以找出连通图的某固定顶点的外向生成树。

定理4.19设连通图G,则由DFS中产生的父子边导出的子图是以s为根的外向生成树,并日在返回边e=ab中,或a是b的祖先,或a是b的后代孙。

程序参数说明

G: 图的邻接矩阵 
W: 图的边的访问顺序,按照顺序从小到大访问
k: 图的顶点标号
f: 相应顶点的父亲顶点

算法程序详解

%深度优先搜索算法
function [W, k, f] = DFS3(G)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%% 输入:     G: 图的邻接矩阵 
%%%%%%%%% 输出:     W: 图的边的访问顺序,按照顺序从小到大访问
%%%%%%%%%            k: 图的顶点标号
%%%%%%%%%            f: 相应顶点的父亲顶点
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%n = size(G,1);          % 计算顶点数
W = G;
v = 1;
k = zeros(1,n);         % 返回标号数组
f = zeros(1,n);         % 返回相应顶点的父亲顶点数组
b = sum(sum(W == 1));   % 计算未标号的总边数
c = sum(k == 0);        % 未标号的顶点数
d = 1;
if b == 0 & c == 0 & v == 1d = 0;
end
k(1) = 1;
j = 2;
l = 2;while d%%%%%%%% 步骤3 %%%%%%%%a = find( W(v,:) == 1 );    % 返回与父亲顶点相关联的顶点%%%%%%%% 步骤5 %%%%%%%%if isempty(a) & f(v) ~= 0W(v,f(v)) = l;      % 将用过的边进行标号l = l + 1;          % 更新边标号v = f(v);else%%%%%%%% 步骤4 %%%%%%%%for i = 1:length(a)if k(a(i)) == 0     % 若顶点 a 未标号k(a(i)) = j;j = j + 1;      % 更新顶点标号W(v,a(i)) = l;  % 将边标记为用过,并对其标号l = l + 1;      % 更新边标号f(a(i)) = v;    % 更新父亲数组标号v = a(i);       % 对父亲标号进行更新break;elseif k(a(i)) ~= 0     % 若顶点 a 已标号W(v,a(i)) = l;      % 将边标记为用过,并对其标号l = l + 1;      % 更新边标号endendendb = sum(sum(W));    % 更新未标号的总边数c = sum(k == 0);    % 更新未标号的顶点数if c == 0 & v == 1  % 若顶点均已标号,结束循环d = 0;end
end
W;

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

开源ids snort (windows版)

Snort-IPS-on-Windows-main资源-CSDN文库 GitHub - eldoktor1/Snort-IPS-on-Windows: A comprehensive guide to installing and configuring Snort IPS on Windows, ensuring robust network security 解压后安装 npcap-1.75.exe Snort_2_9_20_Installer.x64.exe 安装后cm…

MiniMind环境搭建训练推理测试

引子 写了那么多篇大模型环境搭建推理部署的blog,如果没记错有几篇就是因为GPU资源hold不住,没有无法得到最终结果的(智谱AI GLM-4V-9B视觉大模型环境搭建&推理-CSDN博客)。我个人一直觉得大模型发展最终还是要走向端侧&…

8591 计算next值

### 思路 1. **录入字符串**:读取用户输入的字符串个数 n,然后逐个读取每个字符串。 2. **计算NEXT值**:对于每个字符串,计算其NEXT数组。 3. **输出NEXT值**:输出每个字符串对应的NEXT数组。 ### 伪代码 function g…

DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

环境部署-环境变量

环境部署-环境变量 1、python设置查找环境变量2、linux设置设置查找环境变量 仅个人笔记使用,感谢点赞关注 1、python设置查找环境变量 python设置环境变量 import os os.environ["PYTHONPATH"] "/path/to/library"python获取环境变量 MYS…

AI时代最好的编程语言应该选择谁?

在AI的时代,编程语言的选择对就业机会和薪资水平有着至关重要的影响。C和Python被认为是两个极端的代表语言,分别适用于不同的技术需求和开发场景。然而,选择最有价值的编程语言,不仅要考虑其技术特性,还需要综合考虑行…

【数据结构】你真的了解哈希表吗?看完你会对数据结构——哈希表, 会有更深更全面的认识 (理论篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

实例讲解电动汽车VCU故障分类、故障码发送策略及Simulink建模方法

汽车作为一个上万零部件组成的工业品,从设计研发到试制调试再到路试可靠性测试再到车辆批量生产,要经历一个相当长的周期。在设计研发阶段,从设计方案与原理上尽量减少故障出现的可能,在试制调试阶段,通过全面的调试测…

车间设备巡检的意义与设备巡检系统的选择之道

在现代工业生产中,车间设备是企业的核心资产,其稳定运行直接关系到企业的生产效率、产品质量以及经济效益。而车间设备巡检作为设备管理的重要环节,具有不可忽视的重要性。 一、车间设备巡检的重要性 车间设备在长时间、高强度的运行过程中&…

C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究

思考这样一串代码的运行结果&#xff1a; #include <iostream> using namespace std; class Person { public:~Person() { cout << "~Person()" << endl; } }; class Student:public Person { public:~Student() { cout << "~Student(…

Linus Torvalds解释为什么Linux开发人员趋向老龄化反而是件好事

Linux 的关键人物莱纳斯-托瓦尔兹&#xff08;Linus Torvalds&#xff09;说&#xff0c;尽管长期以来一直有关于开源软件开发领域出现倦怠的报道&#xff0c;但 Linux 仍一如既往地强大–尽管他承认&#xff0c;由于其规模和范围&#xff0c;他的项目也许是一个例外。 本周一&…

HTML引用CSS

CSS 样式需要引用到 HTML 中才能真正有效&#xff0c;那么如何才能在 HTML 中引用 CSS 呢&#xff1f;下面就来介绍一下。 1. 内嵌样式表 您可以在 HTML 头部&#xff08;<head>标签内&#xff09;的<style>标签中定义 CSS 样式&#xff0c;使用内嵌样式表定义的…

深入解读MaaS技术架构:从模型服务到智能部署的全流程分析

随着人工智能&#xff08;AI&#xff09;的迅速发展&#xff0c;MaaS&#xff08;Model as a Service&#xff0c;模型即服务&#xff09;技术架构应运而生。它通过将复杂的AI模型封装为标准化服务&#xff0c;降低了模型的开发和部署门槛&#xff0c;帮助企业快速实现业务场景…

传统产品经理如何快速转行成为顶尖的AI产品经理?

前言 产品经理本身便是一个需要不断学习、不断实践的岗位&#xff0c;即使是AI产品经理&#xff0c;也不能脱离产品经理岗位的本质。 另外&#xff0c;要想知道具体如何转行成为顶尖的AI产品经理&#xff0c;我们首先要明确两个问题&#xff0c;即&#xff1a; 什么是AI产品…

RAG 涨点小技巧——RAG上下文召回

昨天Claude团队发了一个关于RAG的博客&#xff0c;介绍了上下文召回的思路&#xff0c;可以看看。先看看标准的RAG&#xff08;检索增强生成&#xff09;是怎么做的&#xff1f; 将用于检索的知识库&#xff08;文档&#xff09;拆为小&#xff08;几百个token&#xff09;的文…

商业银行应用安全架构设计实践

传统的信息安全工作通常偏向于事中或事后检测漏洞,随着敏捷开发工作的逐步推进,商业银行认识到安全架构设计在实现IT降本增效方面的独特优势。近几年,商业银行逐步构建了安全架构设计工作体系,在组织人员、安全技术与管控流程方面,与企业IT架构密切协同,着力建设安全公共…

GPU与国产芯片异构通信方案,异构万卡集群 初步调研

视频分享在这&#xff1a; 3.1异构万卡集群&#xff0c;GPU与国产计算卡芯片异构通信_哔哩哔哩_bilibili 国内已经有三家&#xff0c;实现了异构集群&#xff0c;GPU与国产芯片异构通信方案&#xff0c;初步调用结果如下。 异构集群的挑战 异构芯片间的混训主要面临两大挑战…

《概率论与数理统计》学渣笔记

文章目录 1 随机事件和概率1.1 古典概型求概率随机分配问题简单随机抽样问题 1.2 几何概型求概率1.3 重要公式求概率 2 一维随机变量及其分布2.1 随机变量及其分布函数的定义离散型随机变量及其概率分布&#xff08;概率分布&#xff09;连续型随机变量及其概率分布&#xff08…

Java之线程篇六

目录 CAS CAS伪代码 CAS的应用 实现原子类 实现自旋锁 CAS的ABA问题 ABA问题导致BUG的例子 相关面试题 synchronized原理 synchronized特性 加锁过程 相关面试题 Callable 相关面试题 JUC的常见类 ReentrantLock ReentrantLock 和 synchronized 的区别: 原…

《大学操作系统课程:开启计算机世界的关键之门》

在大学的计算机科学与技术专业中&#xff0c;操作系统课程犹如一把钥匙&#xff0c;为学子们打开了深入了解计算机系统运行机制的大门。 操作系统课程首先会带领你探索操作系统的基本概念。你会明白操作系统是一种系统软件&#xff0c;它管理着计算机的硬件资源和软件资源&…