ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

树的DFS序

2022-07-23 23:35:41  阅读:174  来源: 互联网

标签:node 结点 int DFS 编号 节点


7714: 树的DFS序

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

描述

 

树的DFS序就是在对树进行DFS的时候,对树的节点进行重新编号,每个结点在序列中恰好出现2次。

输入

第一行为正整数n(n<=100),表示结点数。

接下来有n行,第i行的第一个数为编号为i-1的结点值(编号从0到n-1,所有值均不相同),第二个数为m,表示该结点有m个孩子,后面有m个数表示孩子结点编号。

输出

输出树的DFS序中每个结点值,兄弟结点按照输入的顺序访问。

样例输入

10
0 3 1 2 3
1 2 4 5
2 0
3 1 6
4 0
5 0
6 3 7 8 9
7 0
8 0
9 0

样例输出

0 1 4 4 5 5 1 2 2 3 6 7 7 8 8 9 9 6 3 0

从节点0开始遍历,刚访问到一个节点输出该节点值,访问完该节点相邻的所有节点后再输出一遍该节点值

代码

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 class Node//节点
 4 {
 5     public:
 6     int val;//节点值
 7     int len;//与该节点相连的个数
 8     int vec[102];/与该节点相连的每个节点编号
 9 }node[101];//每个节点
10 int n;
11 void dfs(int k)//遍历每个点
12 {
13     for(int i=0;i<node[k].len;i++)
14     {
15         cout<<" "<<node[node[k].vec[i]].val;//刚访问该节点时输出一次该节点值
16         dfs(node[k].vec[i]);
17     }
18     cout<<" "<<node[k].val;//访问完与该节点相连所有节点后输出该节点值
19 }
20 int main()
21 {
22     cin>>n;
23     for(int i=0;i<n;i++)
24     {
25         cin>>node[i].val;
26         cin>>node[i].len;
27         for(int j=0;j<node[i].len;j++)
28         {
29             cin>>node[i].vec[j];
30         }
31     }
32     cout<<node[0].val;//第一次从节点0开始访问,输出0节点值
33     dfs(0);
34     cout<<endl;
35 }

 

标签:node,结点,int,DFS,编号,节点
来源: https://www.cnblogs.com/minz-io/p/16513585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有