Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
打印有向图中不属于任何循环的节点_创想鸟

打印有向图中不属于任何循环的节点

打印有向图中不属于任何循环的节点

在协调图中,识别不属于任何循环的集线器对于不同的应用程序至关重要。这些中心构建了非循环子图的基础,并在理解一般图表结构方面发挥着重要作用。通过使用有效的图表交叉计算,例如 Profundity First Hunt (DFS) 或 Tarjan 对紧密关联部件的计算,我们可以毫不费力地决定并打印不参与任何循环的集线器。这些方法保证了没有循环合作的中心的特色,为图表的非循环部分提供了重要的知识,并支持与图表相关的不同批判性思维情况。

使用的方法

带循环检测的深度优先搜索 (DFS)

Tarjan 的强连通分量算法

带循环检测的深度优先搜索 (DFS)

在此方法中,我们使用深度优先追踪 (DFS) 来导航协调图表并区分途中的周期。我们标记访问过的中心并保留一份清单,以便以持续的 DFS 方式跟踪中心。如果我们遇到后沿(以持续的 DFS 方式到达集线器的边缘),我们会区分一个周期。在 DFS 结束时,正在进行的 DFS 方式中的中心对于一个周期将很重要。不采用持续 DFS 方式的集线器不属于任何循环,可以打印。

算法

在图表上从每个未访问过的中心开始进行深度首次狩猎 (DFS)。

在 DFS 期间,标记访问过的集线器并将其添加到正在进行的 DFS 路径列表中。

如果我们遇到后沿(当前 DFS 方式中到集线器的边缘),我们会区分一个周期,并将当前 DFS 方式中的所有集线器标记为周期的一部分。

当集线器的 DFS 完成后,将其从正在进行的 DFS 路径列表中删除。

完成所有轮毂的 DFS 后,不属于任何循环的轮毂将保持不变,我们可以打印它们。

示例

#include #include class Graph {public:   Graph(int numVertices);   void addEdge(int src, int dest);   void DFS();private:   void DFSUtil(int v, std::vector& visited, std::vector& dfsPath);   int numVertices;   std::vector<std::vector> adjList;};Graph::Graph(int numVertices) : numVertices(numVertices) {   adjList.resize(numVertices);}void Graph::addEdge(int src, int dest) {   adjList[src].push_back(dest);}void Graph::DFSUtil(int v, std::vector& visited, std::vector& dfsPath) {   visited[v] = true;   dfsPath.push_back(v);   for (int neighbor : adjList[v]) {      if (!visited[neighbor]) {         DFSUtil(neighbor, visited, dfsPath);      }      else {         std::cout << "Cycle found: ";         for (size_t i = 0; i < dfsPath.size(); ++i) {            if (dfsPath[i] == neighbor) {               while (i < dfsPath.size()) {                  std::cout << dfsPath[i] << " ";                  ++i;               }               break;            }         }         std::cout << std::endl;      }   }   dfsPath.pop_back();}void Graph::DFS() {   std::vector visited(numVertices, false);   std::vector dfsPath;   for (int i = 0; i < numVertices; ++i) {      if (!visited[i]) {         DFSUtil(i, visited, dfsPath);      }   }}int main() {   Graph graph(6);   graph.addEdge(0, 1);   graph.addEdge(1, 2);   graph.addEdge(2, 3);   graph.addEdge(3, 4);   graph.addEdge(4, 1);   graph.addEdge(4, 5);      std::cout << "DFS traversal with cycle detection:n";   graph.DFS();   return 0;}

输出

DFS traversal with cycle detection:Cycle found: 1 2 3 4 

Tarjan 的强连通分量算法

Tarjan 的计算是一种强大的计算,用于追踪协调图中所有重点关联的部分。明确关联的部分是集线器的子集,其中子集中的任意两个集线器之间存在协调方式。不属于任何紧密关联部件的轮毂也不属于任何循环。通过查找重点关联的零件,我们可以识别不属于任何循环的轮毂并打印它们

算法

将 Tarjan 的计算应用于引导图,以追踪所有重点关联的部分。

在追踪所有重要关联部分后,区分对于紧密关联部分至关重要的中心。

不属于任何明确关联部件的集线器不属于任何循环,并且可以打印。

这两种方法确实区分并打印了不属于协调图表中任何周期的中心。 DFS 方法提供了更简单且更直接的执行,而 Tarjan 的计算更复杂,但提供了有关重点关联部分的额外数据,这对于特定的图表相关任务很有帮助。方法的决定取决于具体的需要和主要紧迫问题的背景。

示例

#include #include #include #include using namespace std;class Graph {   int V;   vector<vector> adj;   vector visited;   vector disc, low;   stack st;   vector<vector> SCCs;   vector essentialNodes;public:   Graph(int V) : V(V) {      adj.resize(V);      visited.resize(V, false);      disc.resize(V, -1);      low.resize(V, -1);      essentialNodes.resize(V, true);   }   void addEdge(int u, int v) {      adj[u].push_back(v);   }   void tarjanDFS(int u) {      static int time = 0;      disc[u] = low[u] = ++time;      st.push(u);      visited[u] = true;      for (int v : adj[u]) {         if (disc[v] == -1) {            tarjanDFS(v);            low[u] = min(low[u], low[v]);         } else if (visited[v]) {            low[u] = min(low[u], disc[v]);         }      }      if (low[u] == disc[u]) {         vector SCC;         int v;         do {            v = st.top();            st.pop();            SCC.push_back(v);            visited[v] = false;         } while (v != u);         SCCs.push_back(SCC);      }   }   void tarjan() {      for (int i = 0; i < V; ++i) {         if (disc[i] == -1) {            tarjanDFS(i);         }      }   }   void identifyEssentialNodes() {      for (const vector& SCC : SCCs) {         for (int v : SCC) {            for (int u : adj[v]) {               if (find(SCC.begin(), SCC.end(), u) == SCC.end()) {                  essentialNodes[u] = false;               }            }         }      }   }   void printEssentialNodes() {      cout << "Essential Nodes for Each SCC:n";      for (int i = 0; i < V; ++i) {         if (essentialNodes[i]) {            cout << i << " ";         }      }      cout << endl;   }};int main() {   Graph g(6);   g.addEdge(0, 1);   g.addEdge(1, 2);   g.addEdge(2, 0);   g.addEdge(1, 3);   g.addEdge(3, 4);   g.addEdge(4, 5);   g.addEdge(5, 3);   g.tarjan();   g.identifyEssentialNodes();   g.printEssentialNodes();   return 0;}

输出

Essential Nodes for Each SCC:0 1 2 4 5

结论

这两种方法确实解决了识别不属于协调图表中任何周期的中心的问题。 DFS 方法易于执行,并且不需要太多额外的信息结构。另一方面,Tarjan 的计算提供了有关重点关联部分的额外数据,这在特定情况下可能会有所帮助。

两种方法之间的决定取决于问题的特定先决条件以及对经过与周期无关的区分中心的额外数据的要求。一般来说,如果唯一的目标是找到不属于任何循环的集线器,则 DFS 方法可能会因其简单性而受到青睐。尽管如此,如果需要进一步检查重点相关部分,Tarjan 的计算可能是一个重要的工具。这两种方法提供了熟练的安排,并且可以根据协调图表的属性和考试的理想结果进行调整

以上就是打印有向图中不属于任何循环的节点的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445121.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
在C++中,使用固定额外空间重新排列正数和负数
上一篇 2025年12月17日 22:12:31
找出在范围内不可被任何数整除的数字,使用C++
下一篇 2025年12月17日 22:12:57

相关推荐

  • 《GT赛车7》将于12月推出大型免费更新“SPEC III”

    sie宣布,《gt赛车》系列的全球总销量已正式突破1亿大关。作为庆祝,即将于12月推出的《gt赛车7》大型免费更新“spec iii”将带来全新赛道与多款新赛车等丰富内容。 视频:https://www.php.cn/link/44917919527fa652749f1acb6dcf9617 以上就…

    2026年9月21日
    100
  • Java OOP如何使用内部类提高代码组织性

    内部类提升Java代码组织性与封装性,成员内部类增强封装,静态内部类分离逻辑,局部与匿名内部类简化回调,私有内部类隐藏实现细节。 内部类在Java面向对象编程中是一种有效提升代码组织性和封装性的工具。通过将一个类定义在另一个类的内部,可以更好地表达类之间的逻辑关系,控制访问权限,并减少命名冲突。合理…

    2026年9月21日
    000
  • MySQL缓存机制对性能提升的作用_MySQL缓存配置及调优方案

    MySQL缓存机制对性能提升的作用_MySQL缓存配置及调优方案MySQL缓存机制对性能提升的作用_MySQL缓存配置及调优方案MySQL缓存机制对性能提升的作用_MySQL缓存配置及调优方案MySQL缓存机制对性能提升的作用_MySQL缓存配置及调优方案

    mysql的缓存机制主要包括innodb缓冲池、查询缓存和操作系统文件系统缓存等,其中innodb缓冲池是性能优化的核心。1. innodb缓冲池缓存表数据和索引页,减少磁盘i/o,提升读写效率;2. 查询缓存因失效频繁及锁竞争问题,在高并发场景下易成瓶颈,已在mysql 8.0中移除;3. 操作系…

    2026年9月21日 • 用户投稿
    100
  • VSCode中竖线怎么设置_VSCode编辑区竖线(标尺)显示与配置教程

    在VSCode中启用垂直标尺需修改settings.json文件中的editor.rulers属性,如设置{ “editor.rulers”: [80, 120] }可在第80和120列显示竖线,提升代码对齐与可读性;虽原生不支持自定义颜色样式,但可通过安装Guides或In…

    2026年9月21日
    100
  • PHP 数组值比较与嵌套数组过滤教程

    本教程详细讲解如何在 PHP 中比较一个简单数组与一个复杂嵌套数组,并根据特定条件(如文件名匹配)过滤嵌套数组中的所有相关子数组。我们将通过识别非匹配项的索引,然后从所有子数组中移除这些项并重新索引,实现精确的数据筛选。 问题背景 在 php 开发中,我们经常会遇到需要处理结构复杂的数组数据。例如,…

    2026年9月21日
    100
  • 漫番漫画官方网页_ 漫番漫画在线访问入口

    漫番漫画官方网页入口为https://manwa.me,该平台汇聚多类型漫画资源,界面简洁、更新稳定,支持网页端流畅阅读;采用动态域名与镜像站点保障访问连续性,配备HTTPS加密提升安全性;提供个性化阅读设置、书架收藏及评论互动功能,优化用户体验。 漫番漫画官方网页入口地址在哪里?这是不少网友都关注…

    2026年9月21日
    200
  • Laravel中的事件和监听器:解耦和优化应用程序交互

    Laravel中的事件和监听器:解耦和优化应用程序交互 引言:在开发应用程序时,我们经常会面临需要实现模块之间的通信和协作的情况。传统的方法是直接在代码中调用其他模块的方法或者通过回调函数进行通信。然而,这种紧密耦合的设计方式会导致代码的复杂性和维护性的下降。为了解决这个问题,Laravel框架提供…

    2026年9月21日
    000
  • 抖音托管商品要钱吗?新人适合橱窗托管吗

    随着抖音平台影响力的不断扩大,越来越多的商家将其视为拓展线上业务的重要渠道。其中,抖音托管商品作为一种新兴推广方式,逐渐受到商家关注。然而,关于“抖音托管商品是否收费”这一问题,仍存在诸多疑问。本文将围绕这一话题展开分析,帮助商家更好地了解相关机制。 一、抖音托管商品概述 抖音托管商品是指商家将商品…

    2026年9月21日
    000
  • Linux之包管理工具(RPM和YUM)

    包管理工具1. rpm包1.1 rpm指令1.1.1 查询指令使用rpm查询已安装的rpm列表:rpm -qa | grep xx 检查是否已安装firefox:rpm -qa | grep firefox 如果显示i686或i386,表示32位系统,noarch表示通用rpm -qa:列出所有已安…

    2026年9月21日
    000
  • windows11磁盘分区怎么操作_windows11磁盘分区调整方法

    可通过系统磁盘管理或易我分区大师调整Windows 11分区。先使用磁盘管理压缩卷释放未分配空间,再新建简单卷;或用易我分区大师无损调整分区,拖动滑块释放空间后合并至目标分区,最后执行任务完成操作。 如果您希望对Windows 11的硬盘进行重新规划,但不确定如何安全地拆分或合并存储空间,则可能是由…

    2026年9月21日
    100
  • Java集合框架在数据处理中的应用实例

    使用Set去重:通过LinkedHashSet去除标签重复并保持顺序;2. Map统计频次:利用HashMap统计单词出现次数;3. List结合Comparator排序:按年龄升序、姓名降序排列用户;4. 集合嵌套处理数据:用Map组织部门与员工列表。集合框架提升数据处理效率与代码可读性。 Jav…

    2026年9月21日
    000
  • Chrome浏览器怎么开启数据同步功能_Chrome浏览器跨设备数据同步设置教程

    首先登录Google账户启用Chrome同步功能,确保书签、历史记录、密码等数据跨设备一致;接着在设置中自定义同步内容类型以满足隐私需求;然后通过Google账户密钥或自定义密码加密同步数据,提升安全性;最后在新设备登录同一账户,自动接收已同步的浏览数据,实现无缝体验。 如果您希望在不同设备间无缝使…

    2026年9月21日
    000
  • 如何为iPhone12Pro刷机固件下载?一步步教你操作

    首先使用爱思助手一键下载适用于iPhone 12 Pro的iOS 18固件,若失败则手动导入IPSW文件,最后可通过恢复模式配合电脑工具强制刷机完成系统重装。 如果您尝试为您的设备重新安装操作系统,但无法获取正确的系统文件,则可能是由于固件下载路径不正确或工具不支持。以下是解决此问题的步骤: 本文运…

    2026年9月21日
    000
  • 如何使用XGBoost训练AI大模型?优化机器学习模型的步骤

    XGBoost并非用于训练GPT类大模型,而是擅长处理结构化数据的高效梯度提升算法,其优势在于速度快、准确性高、支持并行计算、内置正则化与缺失值处理,适用于表格数据建模;通过分阶段超参数调优(如学习率、树深度、采样策略)、结合贝叶斯优化与交叉验证,并配合特征工程、数据预处理和集成学习等关键步骤,可显…

    2026年9月21日
    000
  • 《寂静岭f》明日正式发售!PS官方发文介绍游戏

    《寂静岭f》明日正式发售!PS官方发文介绍游戏《寂静岭f》明日正式发售!PS官方发文介绍游戏《寂静岭f》明日正式发售!PS官方发文介绍游戏《寂静岭f》明日正式发售!PS官方发文介绍游戏

    来入手《寂静岭f》吧!使用专属优惠券并叠加金币后,标准版仅需361.59元(共节省29.41元);豪华版为412.76元(总计优惠33.24元)。 备受期待的《寂静岭》系列新作《寂静岭f》将于明日(9月25日)正式上线。PS官方博客近日发布详细情报,揭开这款作品的神秘面纱。 本作背景设定在1960年…

    2026年9月21日 • 用户投稿
    000
  • VSCode代码编辑器在线使用_VSCode网页版免安装直接进入编辑

    答案:无需安装即可在浏览器使用VSCode,主要方式包括GitHub Codespaces、Gitpod、StackBlitz、CodeSandbox和自托管code-server,适用于不同场景,如GitHub集成、前端开发或完全控制环境;但存在网络依赖、性能限制、插件兼容性、文件访问和安全等局限…

    2026年9月21日
    100
  • MySQL全文搜索如何与外部引擎结合_提升搜索体验?

    MySQL全文搜索如何与外部引擎结合_提升搜索体验?MySQL全文搜索如何与外部引擎结合_提升搜索体验?MySQL全文搜索如何与外部引擎结合_提升搜索体验?MySQL全文搜索如何与外部引擎结合_提升搜索体验?

    mysql 的全文搜索在中文分词和复杂查询上存在局限,常结合外部引擎提升性能。1. 使用 elasticsearch,通过 logstash 或 canal 同步数据,安装中文分词插件并利用布尔查询等优化搜索。2. 利用 sphinx,从 mysql 直接构建索引,通过 sql-like 接口和中文…

    2026年9月21日 • 用户投稿
    000
  • VSCode远程开发:配置容器与SSH连接的最佳实践解析

    使用VSCode远程开发提升效率,通过Remote-Containers和Remote-SSH实现环境标准化。1. 配置.devcontainer文件夹,用devcontainer.json定义容器环境,推荐自定义Dockerfile并预装工具;2. SSH连接需配置公钥认证、~/.ssh/conf…

    2026年9月21日
    100
  • win8如何禁用笔记本自带键盘_Win8笔记本键盘禁用方法

    可通过命令提示符、设备管理器或注册表编辑器禁用Win8笔记本自带键盘。1、命令提示符输入sc config i8042prt start= disabled并重启;2、设备管理器中禁用“PS/2标准键盘”或“HID Keyboard Device”;3、注册表中将i8042prt服务的Start值改…

    2026年9月21日
    000
  • Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]

    Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]

    大家好,很高兴再次与你们见面,我是你们的朋友全栈君。 Ubuntu安装前言最近我决定将开发环境切换到Linux系统,经过一番研究,我选择了Ubuntu桌面版,因为它不仅美观,而且作为生产系统的生态环境也非常好。于是,我开始寻找安装Ubuntu双系统的方法。安装方法有三种: 虚拟机安装:这种方法无法充…

    2026年9月21日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信