打印给定 Prufer 排列中每个中心的度,准备通过排列强调并统计每个节点的事件。通过跟踪每个节点的递归,我们将确定该中心在相应标记树中的度。这些数据可以深入了解树的网络和结构。通过打印每个轮毂的度数,您可以分析传输并区分必要的轮毂。这项检查对于理解基于 Prufer 排列表示的初始树的属性和特征有所不同。
使用的方法
频率计数方法
邻接表表示方法
频率计数方法
从给定的 Prufer 排列中打印每个集线器度数的频率计数方法包括统计每个集线器的事件来确定其度数。为了实现这种方法,初始化一个词典或簇来存储中心的频率。重复普鲁弗安排并增加每个经历过的枢纽的数量。每个集线器的计数表明其在标记树中的程度。最后,根据重复检查打印所有轮毂的度数。这种方法提供了一种清晰的方法来分析Prufer排列内的网络和枢纽度的传播,并获得第一棵树的结构特征。
算法
初始化一个清除词引用或集群来存储节点的频率。
迭代 Prufer 序列中的每个组件“中心”。
检查词典或数组中是否存在“hub”。
如果存在,则将其计数增加 1。
如果不存在,请将其包含在单词引用或簇中,初始计数为 1。
循环完成后,您就可以获得 Prufer 序列中每个中心的频率。
迭代单词引用或数组中的每个键值对。
键与中心相关,而自尊则与标记树中的数量或程度相关。
打印每个键值对的中心及其比较程度。
打印的集线器度数说明了它们在标记树中的特定度数。
示例
#include <iostream> #include <vector> struct HubFrequency { int hub; int frequency; }; void countFrequencies(const std::vector<int>& pruferSequence) { std::vector<HubFrequency> frequencyVector; for (int hub : pruferSequence) { bool found = false; for (HubFrequency& hf : frequencyVector) { if (hf.hub == hub) { hf.frequency++; found = true; break; } } if (!found) { frequencyVector.push_back({hub, 1}); } } for (const HubFrequency& hf : frequencyVector) { std::cout << "Hub: " << hf.hub << ", Degree: " << hf.frequency << std::endl; } } int main() { std::vector<int> pruferSequence = {1, 2, 3, 1, 3}; countFrequencies(pruferSequence); return 0; }
输出
Hub: 1, Degree: 2 Hub: 2, Degree: 1 Hub: 3, Degree: 2
邻接表表示方法
邻接表表示方法包括将 Prufer 分组更改为邻接表信息结构。初始化一个清除邻接列表,对于 Prufer 序列中的每个组件,在列表中添加一个部分来展示该节点的邻居。构建邻接列表时,请跟踪每个集线器的频率。最后,确定邻接列表中重复率最高的中心,并将其与 Prufer 分组中度数最高的中心进行比较。这种方法使我们能够利用邻接表的结构和从 Prufer 分组推断的递归数据最大程度地熟练地确定集线器。
算法
初始化一个空的邻接列表和一个清除重复计数器。
迭代 Prufer 序列中的每个组件:
a。增加当前节点的重复计数器。
b。将当前集线器包含为序列中提到的集线器的邻居。
在重复计数器中查找重复频率最高的中心。该集线器与度数最大的集线器进行比较。
将轮毂恢复至最大程度。
示例
#include <iostream> #include <vector> #include <unordered_map> // Function to find the hub with the highest recurrence int findHighestRecurrence(const std::unordered_map<int, int>& recurrenceCounter) { int highestRecurrence = 0; int hubWithHighestRecurrence = -1; for (const auto& entry : recurrenceCounter) { int hub = entry.first; int recurrence = entry.second; if (recurrence > highestRecurrence) { highestRecurrence = recurrence; hubWithHighestRecurrence = hub; } } return hubWithHighestRecurrence; } // Function to construct adjacency list from Prufer sequence std::vector<std::vector<int>> constructAdjacencyList(const std::vector<int>& pruferSequence) { std::unordered_map<int, int> recurrenceCounter; std::vector<std::vector<int>> adjacencyList(pruferSequence.size() + 2); for (int hub : pruferSequence) { recurrenceCounter[hub]++; adjacencyList[hub].push_back(findHighestRecurrence(recurrenceCounter)); adjacencyList[findHighestRecurrence(recurrenceCounter)].push_back(hub); } recurrenceCounter[findHighestRecurrence(recurrenceCounter)]++; return adjacencyList; } int main() { // Example Prufer sequence: {1, 3, 4, 2} std::vector<int> pruferSequence = {1, 3, 4, 2}; std::vector<std::vector<int>> adjacencyList = constructAdjacencyList(pruferSequence); // Print the constructed adjacency list for (int i = 1; i < adjacencyList.size(); i++) { std::cout << "Node " << i << " connects to: "; for (int j = 0; j < adjacencyList[i].size(); j++) { std::cout << adjacencyList[i][j] << " "; } std::cout << std::endl; } return 0; }
输出
Node 1 connects to: 1 1 Node 2 connects to: 2 2 Node 3 connects to: 3 3 Node 4 connects to: 4 4 Node 5 connects to:
结论
本文阐明了如何使用两种不同的方法打印给定 Prufer 分组中每个中心的度数:递归计数方法和邻接列表表示方法。重复计数方法包括对分组内每个中心的事件进行计数以确定其程度。邻接列表表示方法根据排列开发邻接列表并跟踪每个集线器的重复以发现具有最值得注意度的集线器。本文提供了这两种方法的 C 代码说明并说明了它们的用法。通过打印轮毂度数,我们可以分析组织结构并识别 Prufer 排列表示中的关键轮毂。
以上是打印给定Prufer序列中每个节点的度数的详细内容。更多信息请关注PHP中文网其他相关文章!

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显着差异。 1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。 2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。

从XML转换到C 并进行数据操作可以通过以下步骤实现:1)使用tinyxml2库解析XML文件,2)将数据映射到C 的数据结构中,3)使用C 标准库如std::vector进行数据操作。通过这些步骤,可以高效地处理和操作从XML转换过来的数据。

C#使用自动垃圾回收机制,而C 采用手动内存管理。1.C#的垃圾回收器自动管理内存,减少内存泄漏风险,但可能导致性能下降。2.C 提供灵活的内存控制,适合需要精细管理的应用,但需谨慎处理以避免内存泄漏。

C 在现代编程中仍然具有重要相关性。1)高性能和硬件直接操作能力使其在游戏开发、嵌入式系统和高性能计算等领域占据首选地位。2)丰富的编程范式和现代特性如智能指针和模板编程增强了其灵活性和效率,尽管学习曲线陡峭,但其强大功能使其在今天的编程生态中依然重要。

C 学习者和开发者可以从StackOverflow、Reddit的r/cpp社区、Coursera和edX的课程、GitHub上的开源项目、专业咨询服务以及CppCon等会议中获得资源和支持。1.StackOverflow提供技术问题的解答;2.Reddit的r/cpp社区分享最新资讯;3.Coursera和edX提供正式的C 课程;4.GitHub上的开源项目如LLVM和Boost提升技能;5.专业咨询服务如JetBrains和Perforce提供技术支持;6.CppCon等会议有助于职业

C#适合需要高开发效率和跨平台支持的项目,而C 适用于需要高性能和底层控制的应用。1)C#简化开发,提供垃圾回收和丰富类库,适合企业级应用。2)C 允许直接内存操作,适用于游戏开发和高性能计算。

C 持续使用的理由包括其高性能、广泛应用和不断演进的特性。1)高效性能:通过直接操作内存和硬件,C 在系统编程和高性能计算中表现出色。2)广泛应用:在游戏开发、嵌入式系统等领域大放异彩。3)不断演进:自1983年发布以来,C 持续增加新特性,保持其竞争力。

C 和XML的未来发展趋势分别为:1)C 将通过C 20和C 23标准引入模块、概念和协程等新特性,提升编程效率和安全性;2)XML将继续在数据交换和配置文件中占据重要地位,但会面临JSON和YAML的挑战,并朝着更简洁和易解析的方向发展,如XMLSchema1.1和XPath3.1的改进。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版
好用的JavaScript开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),