请将图转换成以某个结点为根结点的树

2023-12-07 21:20
文章标签 转换成 结点 为根

本文主要是介绍请将图转换成以某个结点为根结点的树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目要求:请将图转换为以某个结点为根结点的数。然后,输出所有从根结点到叶子结点的路径。

例如:
在这里插入图片描述
示例输入,

6
0 1
1 2
1 4
3 4
4 5

期望输出,

1 0 
1 2 
1 4 3 
1 4 5 

解题思路1:创建一个全局布尔型数组st,访问过的结点不再访问,记得恢复现场。C++代码如下,

#include <iostream>
#include <vector>using namespace std;int n;
vector<vector<int>> g;
vector<int> path;
vector<bool> st;void dfs(int node) {path.emplace_back(node);st[node] = true;bool has_succ = false;for (auto nextnode : g[node]) {if (st[nextnode] == false) {has_succ = true;break;}}if (has_succ == false) {//叶子结点for (auto node : path) {cout << node << " ";}cout << endl;} else {for (auto nextnode : g[node]) {if (st[nextnode] == false) {dfs(nextnode); //进一步递归}}}path.pop_back();st[node] = false;return;
}int main() {cin >> n;g.resize(n);st.resize(n, false);int a, b;while (cin >> a >> b) {g[a].emplace_back(b);g[b].emplace_back(a);}//输出以1号结点为根节点到所有叶子结点的路径dfs(1);return 0;
}

解题思路2(推荐):深搜时传入当前结点和其父节点。C++代码如下,

#include <iostream>
#include <vector>using namespace std;int n;
vector<vector<int>> g;
vector<int> path;void dfs(int node, int fa) {path.emplace_back(node);bool has_succ = false;for (auto nextnode : g[node]) {if (nextnode != fa) {has_succ = true;break;}}if (has_succ == false) {//叶子结点for (auto node : path) {cout << node << " ";}cout << endl;} else {for (auto nextnode : g[node]) {if (nextnode != fa) {dfs(nextnode, node); //进一步递归}}}path.pop_back();return;
}int main() {cin >> n;g.resize(n);int a, b;while (cin >> a >> b) {g[a].emplace_back(b);g[b].emplace_back(a);}//输出以1号结点为根节点到所有叶子结点的路径dfs(1, -1);return 0;
}

这篇关于请将图转换成以某个结点为根结点的树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/467394

相关文章

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

多重背包转换成0-1背包

http://acm.hdu.edu.cn/showproblem.php?pid=2191 多重背包特点: 一种物品有C个(既不是固定的1个,也不是无数个) 优化的方法: 运用神奇的二进制,进行物品拆分,转化成01背包 物品拆分,把13个相同的物品分成4组(1,2,4,6) 用这4组可以组成任意一个1~13之间的数! 原理:一个数总可以用2^

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

将浮点型算式的中缀表达式转换成后缀表达式并算出式子结果

最近因为需要了解如何将在Win应用程序控制台输入的算式表达式转化成其后缀表达式的算法,所以在网上搜索了一下,看到许多人的程序都只是对应于运算数在0~9的范围内的整型运算式,所以自己就写了一个可以计算浮点型算式的程序,一下是运行时的截图: 式子中的a,b,c是可供用户自行输入的变量。 首先,我先对输入的运算符进行了简单的合法性判断,我的判断代 码如下: //函数的传入参

带头结点的线性链表的基本操作

持续了好久,终于有了这篇博客,链表的操作需要借助图像模型进行反复学习,这里尽可能的整理并记录下自己的思考,以备后面复习,和大家分享。需要说明的是,我们从实际应用角度出发重新定义了线性表。 一. 定义 从上一篇文章可以看到,由于链表在空间的合理利用上和插入、删除时不需要移动等优点,因此在很多场合下,它是线性表的首选存储结构。然而,它也存在某些实现的缺点,如求线性表的长度时不如顺序存储结构的

【hdu】I Hate It(线段树,结点修改求区间最大值)

线段树的模板题,还是二分递归。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <set>#include <map>#incl

【hdu】敌兵布阵(线段树,更加结点,区间求和)

最近开始刷线段树,主要围绕notonlysuccess的线段树总结刷。 结点修改还是比较简单的,不需要什么懒惰标记,直接二分递归就可以了。 #include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vecto

使用pyelftools把elf文件转换成s19文件

要使用pyelftools将ELF文件转换成S19文件格式,你需要首先安装pyelftools库,然后编写一个脚本来读取ELF文件,提取其中的代码和数据部分,并按照S19文件的格式生成对应的记录。 以下是一个简单的Python脚本示例,它演示了如何使用pyelftools将ELF文件转换为S19文件: import elftoolsfrom elftools.elf.elffile impo

手机上将mp4转换成amv怎么转?视频转换,3个方法拿捏

在这个社交媒体时代,视频已经成为人们传递信息、表达情感的重要方式之一。然而,不同的设备和平台对视频格式的要求不尽相同,这就需要我们不时地进行视频格式转换,以便在不同的场景中更好地展示和分享我们的作品。 对视频格式转换陌生的人来说,转码一直是个头疼的问题。近日,有读者向小编询问怎么在手机上将mp4转换成amv?别着急,今天小编就为大家介绍3种将mp4转换成amv的方法,从此以后看到格式转换也不用怕

安卓金币字符串转换成三位一个逗号的格式

DecimalFormat df1 = new DecimalFormat("###,###,###,##0.##");         return df1.format(Double.parseDouble(“ 17352208.25 ”)); 输出   17,352,208,25