多叉树/图结构维护问题转线性结构——dfs序
dfs——深度优先遍历搜索
存储结构:链式向前星
下面是我看到的一篇很好的链式向前星讲解文章:
深度理解链式向前星
转载出处: https://blog.csdn.net/ACdreamers/article/details/16902023
链式向前星的逻辑结构如下
dfs的运行代码
//建立边结构体
struct edge
{int To; //第i条边的终点(初始化时为-1)int Weight; //此边的权值(初始化为0)int Next; //与此边相同起点的边在edge数组中的位置(初始化为-1)
}Edge[MAXSIZE]; //向前星下标(0--MAXSIZE)
//存边器(链式向前星)构建完成
int cnt_edg=0; //存边器下标存储
int Head[MAXSIZE]; //Head[i]存以i为起点的广度链表头指针
void add(int from, int to,int value)
{//加边(from:起点/to:终点/value:权值) Edge[cnt_edg].To = to; //cnt_edg为向前星下标计数器(第cnt_edg条边,cnt_edg从0开始)Edge[cnt_edg].Weight = value; //记录权值Edge[cnt_edg].Next = Head[from]; //此操作本质是链表的前插法(Head[from]为以from为起点的边链表(存储from广度)头指针)Head[from] = cnt_edg++; //存边器存边数+1
}
//图建立完成
int beg[MAXSIZE], last[MAXSIZE]; //begin[i]和last[i]分别存储以i为起点的连通子图(树结构为子树)的dfs序的起始位置和终止位置(子树/子图长度为last[i]-beg[i]+1)
//dfs序存储下标(1--MAXSIZE)(对应树状数组)
int cnt_dfs=0; //dfs序长度存储
void dfs(int fa, int son)
{//图遍历:fa:父结点,son:子结点 (遍历以son为起点的子图) (树结构是遍历son对应的子树)//获得一个以son为起点的dfs序()//dfs(-1,1)获取整个图的dfs逻辑序(以1为起点),想要存储dfs序可根据beg[]来for循环beg[son] = ++cnt_dfs;for (int i = Head[son];~i;i = Next[i]) //for循环是son的广度 ~i:i!=-1 (~非运算符,-1的补码全为1)if (fa != To[i]) dfs(son, To[i]); //广度的每个子树对应一个深度last[son] = cnt_dfs; //(单个深度遍历完毕)
}
//深搜完成
多叉树/图结构维护问题转线性结构——dfs序相关推荐
- 什么是线性结构,什么是非线性结构?
什么是线性结构,什么是非线性结构? 线性结构是一个有序数据元素的集合.常用的线性结构有:线性表,栈,队列,双队列,数组,串. 非线性结构,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继.常见 ...
- 【轻松学数据结构】动图剖析数据结构中的线性结构(六千字超详细教程,附源码)
- 使用计算机制作数字文本结构 可以,使用计算机制作的数字文本结构,可以分为线性结构与非线性结构,简单文本呈现为一种____结构,写作和阅读均按顺序进行。...
[单选题]人体工程学联系到室内设计,其定义为:以人为主体,运用人体计测.生理与心理计测等手段和方法,研究人体结构功能.心理.力学等方面与室内环境之间的合理协调关系,以适合人的身心活动要求,取得最佳的使 ...
- (一)数据结构与算法-线性结构和非线性结构
线性结构和非线性结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储借故偶和链式存储结构 ...
- c语言存储的逻辑顺序,栈是不是顺序储存的线性结构啊?
栈是不是顺序储存的线性结构啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 栈是不是顺序储存的线性结构啊? 呃~弄明白 ...
- 线性结构和非线性结构基本概念
线性结构和非线性结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式 ...
- 线性结构和非线性结构
1.线性结构的特点: 线性结构有唯一的首元素(即为第一个元素) 线性结构有唯一的尾元素(即最后一个元素) 除首元素外,所有元素都有唯一的"前驱" 除尾元素外,所有袁旭都有唯一的&q ...
- 线性结构和非线性结构 - 数据结构基础
数据结构笔记-线性结构和非线性结构 数据结构按逻辑结构分类分为:集合(无逻辑结构),线性结构,和非线性结构. : 一.线性结构: 线性结构是一个有序数据元素的集合.常用的线性结构有:线性表,栈,队列, ...
- java数据结构之线性结构和非线性结构
数据结构包括 :线性结构和非线性结构. 线性结构 1):线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 2):线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序 ...
最新文章
- 【Deep Learning】深度学习中的函数类型
- Python中元组的介绍以及常见操作
- PyTorch torchvision.models小结
- 自百度2012吧——这些都是巧合吗
- 搞定mac的bashrc
- 用CSS让文字居于div的底部
- rgb颜色查询工具_认识色彩的三要素 理解颜色的此消彼长 合理使用工具改变照片色彩...
- linux tomcat守护_linux 设置tomcat为守护进程教程
- 【BZOJ 1497】 [NOI2006]最大获利
- Node mongoose 结尾总结
- 六种数据格式CSV、 Pickle、MessagePack、HDF5、Feather、 Parquet的比较
- java设置本机地址写在哪个类_JAVA获取指定的类型的本机MAC地址
- 传值中处理jsp中文乱码问题
- js对象定义的3种方法
- 墨天轮沙龙 | 东方通张唐:东方通中间件助力信创发展
- web网页qq客服功能
- C语言圆角矩形画法,GDI+ 如何绘制圆角矩形(vc++)
- 微信动态表情保存到手机相册
- 2019北航_夏令营
- java 反编译软件