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序相关推荐

  1. 什么是线性结构,什么是非线性结构?

    什么是线性结构,什么是非线性结构? 线性结构是一个有序数据元素的集合.常用的线性结构有:线性表,栈,队列,双队列,数组,串. 非线性结构,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继.常见 ...

  2. 【轻松学数据结构】动图剖析数据结构中的线性结构(六千字超详细教程,附源码)

  3. 使用计算机制作数字文本结构 可以,使用计算机制作的数字文本结构,可以分为线性结构与非线性结构,简单文本呈现为一种____结构,写作和阅读均按顺序进行。...

    [单选题]人体工程学联系到室内设计,其定义为:以人为主体,运用人体计测.生理与心理计测等手段和方法,研究人体结构功能.心理.力学等方面与室内环境之间的合理协调关系,以适合人的身心活动要求,取得最佳的使 ...

  4. (一)数据结构与算法-线性结构和非线性结构

    线性结构和非线性结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储借故偶和链式存储结构 ...

  5. c语言存储的逻辑顺序,栈是不是顺序储存的线性结构啊?

    栈是不是顺序储存的线性结构啊?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 栈是不是顺序储存的线性结构啊? 呃~弄明白 ...

  6. 线性结构和非线性结构基本概念

    线性结构和非线性结构 数据结构包括:线性结构和非线性结构 线性结构 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构(数组)和链式 ...

  7. 线性结构和非线性结构

    1.线性结构的特点: 线性结构有唯一的首元素(即为第一个元素) 线性结构有唯一的尾元素(即最后一个元素) 除首元素外,所有元素都有唯一的"前驱" 除尾元素外,所有袁旭都有唯一的&q ...

  8. 线性结构和非线性结构 - 数据结构基础

    数据结构笔记-线性结构和非线性结构 数据结构按逻辑结构分类分为:集合(无逻辑结构),线性结构,和非线性结构. : 一.线性结构: 线性结构是一个有序数据元素的集合.常用的线性结构有:线性表,栈,队列, ...

  9. java数据结构之线性结构和非线性结构

    数据结构包括 :线性结构和非线性结构. 线性结构 1):线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系. 2):线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序 ...

最新文章

  1. 【Deep Learning】深度学习中的函数类型
  2. Python中元组的介绍以及常见操作
  3. PyTorch torchvision.models小结
  4. 自百度2012吧——这些都是巧合吗
  5. 搞定mac的bashrc
  6. 用CSS让文字居于div的底部
  7. rgb颜色查询工具_认识色彩的三要素 理解颜色的此消彼长 合理使用工具改变照片色彩...
  8. linux tomcat守护_linux 设置tomcat为守护进程教程
  9. 【BZOJ 1497】 [NOI2006]最大获利
  10. Node mongoose 结尾总结
  11. 六种数据格式CSV、 Pickle、MessagePack、HDF5、Feather、 Parquet的比较
  12. java设置本机地址写在哪个类_JAVA获取指定的类型的本机MAC地址
  13. 传值中处理jsp中文乱码问题
  14. js对象定义的3种方法
  15. 墨天轮沙龙 | 东方通张唐:东方通中间件助力信创发展
  16. web网页qq客服功能
  17. C语言圆角矩形画法,GDI+ 如何绘制圆角矩形(vc++)
  18. 微信动态表情保存到手机相册
  19. 2019北航_夏令营
  20. java 反编译软件

热门文章

  1. Bootstrap学习(一)
  2. android选择本地图片并裁剪
  3. 深入理解数组与指针——原因在于”退化“
  4. AVCaptureDevice的几个属性
  5. Code Block 使用笔记(win7、updating)
  6. sql server数据表转换成xml
  7. ZAO 换脸不安全?用 python 轻松实现 AI
  8. 新手如何入门PyTorch
  9. 一个有趣的IP不同的问题?
  10. selector的使用