如何使用不可变数据类型实现 DFS

2023-12-21

我正在尝试找出一种 Scala 风格的图形遍历方式,最好使用 val 和不可变数据类型。

鉴于下图,

val graph = Map(0 -> Set(1),
                1 -> Set(2),
                2 -> Set(0, 3, 4),
                3 -> Set(),
                4 -> Set(3))

我希望输出是从给定节点开始的深度优先遍历。例如从 1 开始,应该产生例如1 2 3 0 4.

如果没有可变集合或变量,我似乎无法找到一种很好的方法来做到这一点。任何帮助,将不胜感激。


尾递归解决方案:

  def traverse(graph: Map[Int, Set[Int]], start: Int): List[Int] = {
    def childrenNotVisited(parent: Int, visited: List[Int]) =
      graph(parent) filter (x => !visited.contains(x))

    @annotation.tailrec
    def loop(stack: Set[Int], visited: List[Int]): List[Int] = {
      if (stack isEmpty) visited
      else loop(childrenNotVisited(stack.head, visited) ++ stack.tail, 
        stack.head :: visited)
    }
    loop(Set(start), Nil) reverse
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用不可变数据类型实现 DFS 的相关文章

  • Scala Sparkcollect_list() 与 array()

    有什么区别collect list and array 在 Spark 中使用 scala 我看到到处都有使用情况 但我不清楚用例来确定差异 尽管两者array https spark apache org docs latest api
  • 使用无形类型不等式时如何自定义 Scala 模糊隐式错误

    def typeSafeSum T lt Nat W lt Nat R lt Nat x T y W implicit sum Sum Aux T W R error R 7 x typeSafeSum 3 4 compilation er
  • 如何在 akka actor 中测试公共方法?

    我有一个 akka 演员 class MyActor extends Actor def recieve def getCount id String Int do a lot of stuff proccess id do more st
  • 尝试创建 jar 时出现 UNRESOLVED DEPENDENCIES 错误

    我正在尝试构建一个 Scala jar 文件以在 Spark 中运行它 我正在关注这个tutorial http spark apache org docs latest quick start html 当尝试使用 sbt 作为构建 ja
  • 在 Spark 中将多行汇总为单行和单列

    我有一个如下的火花 DF 我需要汇总具有与单行相同 ID 的多行 但值应该不同 id values 1 hello 1 hello Sam 1 hello Tom 2 hello 2 hello Tom 预期输出 id values 1 h
  • Scala 中的行聚合

    我正在寻找一种方法在 Scala 的数据框中获取一个新列来计算min max中的值col1 col2 col10对于每一行 我知道我可以使用 UDF 来做到这一点 但也许有一种更简单的方法 Thanks Porting 这个Python答案
  • 创建自定义 scala 集合,其中映射默认返回自定义集合?

    特质TraversableLike A Repr 允许人们在其中进行收藏some函数将返回一个Repr 而其他人则继续返回类型参数That在功能上 有没有办法定义一个CustomCollection A 其中函数如map 其他的默认That
  • 理解 scala 的 _ 与 Any/Nothing

    如果一个类具有协变类型参数 例如Iterable A http www scala lang org archives downloads distrib files nightly docs 2 10 1 library index ht
  • 错误:无法在 scala 中找到或加载主类

    安装 eclipse scala 插件和 eclipse maven scala 插件后 我是 scala 新手 所以我尝试确保在测试 scala hello world 项目后环境正常工作 它按预期工作 但我在尝试执行我从公司存储库中签出
  • scala.math.BigDecimal :1.2 和 1.20 相等

    将 Double 或 String 转换为 scala math BigDecimal 时如何保持精度和尾随零 用例 在 JSON 消息中 属性的类型为 String 值为 1 20 但是在 Scala 中读取这个属性并将其转换为 BigD
  • Scalaz 拆箱标记类型不会自动拆箱

    Reading http eed3si9n com learning scalaz Tagged type html http eed3si9n com learning scalaz Tagged type html并尝试示例代码 imp
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • 比较 javascript 元素和 scala 变量的 Play 框架 Twirl 模板

    如下面的代码示例所示 我想比较 scala 辅助元素内的 javascript 元素 然而 即使存在元素 abcde 它也始终返回 false 除了使用标签之外 如何获取 scala 辅助元素内的 javascript 值 appSeq S
  • SBT插件——编译前执行自定义任务

    我刚刚编写了我的第一个 SBT 自动插件 它有一个生成设置文件的自定义任务 如果该文件尚不存在 当显式调用任务时 一切都会按预期工作 但我希望在使用插件编译项目之前自动调用它 无需项目修改其 build sbt 文件 有没有办法实现这一点
  • Akka Stream - 根据 Flow 中的元素选择 Sink

    我正在使用 Akka 流创建一个简单的消息传递服务 该服务就像邮件递送一样 其中来自源的元素包括destination and content like case class Message destination String conte
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 将 Scala AST 转换为源代码

    给定一个 Scala AST 有没有办法生成 Scala 源代码 我正在研究通过解析 分析其他 Scala 源代码来自动生成 Scala 源代码的方法 任何提示将不胜感激 我已经成功使用Scala 重构 http scala refacto
  • 标识符中下划线的 Scala 风格指南

    我已经接受了许多其他语言的观点 即下划线在标识符中具有与字母表一样多的自由度 因此 v and v 另外 尾随下划线是受到推崇的避免与保留关键字产生歧义 class case val abc 0
  • 如何在 scala 中的二维数组上使用 contains 方法

    我有一个二维数组 我想检查二维数组内是否存在数组 我努力了 var arr Array Array 2 1 Array 4 3 var contain arr contains Array 4 3 println contain 这应该打印
  • Spark DataFrame 不尊重架构并将所有内容视为字符串

    我面临着一个多年来一直无法克服的问题 我使用的是 Spark 1 4 和 Scala 2 10 我现在无法升级 大型分布式基础设施 我有一个包含几百列的文件 其中只有 2 列是字符串 其余都是长列 我想将此数据转换为标签 特征数据框 我已经

随机推荐

  • Django Facebook Connect 应用推荐

    我想为我的 Django 网站实现 Facebook 连接登录 并且我已经检查了现有的应用程序 到目前为止 我已经找到了Django Socialauth http github com uswaretech Django Socialau
  • Julia 中有外部映射函数吗?

    我正在尝试构建四个向量 模型中的参数 的所有可能组合 这将为我提供一个大的 nx4 矩阵 然后我可以对每组 行 参数运行模拟 在 R 中我将通过使用来实现这一点expand grid在 Mathematica 风格中 我可以使用类似外积的东
  • Clojure 源代码中的父 eval(阅读器)函数?

    In 彼得 诺维格 http norvig com 史诗巨著人工智能编程范式 http norvig com paip html在第 7 章中 他描述了一个函数interp这实际上是一个简单的eval解释 REPL 中的基本方案时使用的函数
  • Django 过滤 ModelChoiceField 的查询集

    我一直在使用名为 ModelChoiceField 的表单字段并通过所有对象进行查询 但这并不完全是我打算使用它的目的 class PictureForm forms ModelForm Whiteboard forms ModelChoi
  • 是否有将资源嵌入 Linux 可执行映像的标准方法? [复制]

    这个问题在这里已经有答案了 通过 Windows API 将二进制资源嵌入到 PE 映像 EXE DLL 中非常容易 请参阅http msdn microsoft com en us library ms648008 v VS 85 asp
  • 为什么 PHPmailer 在发送后将 mime 标头打印到屏幕上?

    问题是 我刚刚实现了 PHPMailer 它在发送电子邮件后将 Mime 标头打印到屏幕上 我正在使用 GITHUB 上列出的最新 PHPMailer 代码 我几乎浏览了所有内容 但找不到打印到屏幕的任何原因 如果您需要更多信息 请告诉我
  • Java - windows/linux 中的控制台输出

    Java支持在输出到控制台时控制光标吗 例如 我想在执行 System out print 之前设置字符位置 可能还设置颜色 想想像 top 这样的应用程序写入控制台的方式 谢谢 您通常不使用 system out 来执行这些操作 nix
  • 如何使用关联常量来定义数组的长度? [复制]

    这个问题在这里已经有答案了 我有一个特征 它代表一个可以通过 UDP 套接字发送的实体 pub trait ToNetEnt const NET SIZE usize fn from net data u8 gt Self fn to ne
  • EL 方法中的参数

    我想在 JSP 中使用带有参数的 EL 方法 但 EL 不支持方法中的参数 实际上我想显示一个表格 其中有一个字段可以在一个单元格中输出值列表 对于每个单元格 此列表都会有所不同 这取决于参数 我该如何使用 EL 来做到这一点 我已经尝试过
  • 在 ngOnDestroy 函数中调用时如何等待 api 调用完成?

    我有一个场景 我必须在特定组件被销毁之前将数据发送到 api 数据库 正如 Angular2 生命周期中所描述的 在组件被销毁并调用之前执行一个方法ngOnDestroy 但正如文档中所指定的 这是一个 void 函数 因此它不会等待某些结
  • 将 IOSurface 绘制到另一个 IOSurface

    如何将一系列 IOSurface 绘制到另一个 然后将其绘制到屏幕上 我在 MultiGPU 示例项目中使用了苹果的一些源代码 但我能做的最好的事情就是绘制白屏或获得大量伪像并使应用程序崩溃 我对 openGL 很陌生 不太了解帧缓冲区和纹
  • 如何在一个 Include 后执行多个 ThenIninclude 导航道具

    对于 TestType 我想包含导航道具 Schoolclass 和 subject 我可以做一个 Include t gt t TestType ThenInclude x gt x Subject 但不是 Include t gt t
  • 跟踪约束的技术

    场景如下 我编写了一些带有类型签名的代码 GHC 抱怨无法推断出某些代码的 x yx and y 通常 您可以扔掉 GHC 并简单地将同构添加到函数约束中 但由于以下几个原因 这是一个坏主意 它并不强调理解代码 您最终可能会得到 5 个约束
  • 线程可以安全地读取VCL事件设置的变量吗?

    线程读取 Delphi VCL 事件设置的变量是否安全 当用户单击 VCL TCheckbox 时 主线程将布尔值设置为复选框的选中状态 CheckboxState CheckBox1 Checked 任何时候 线程都会读取该变量 if C
  • 在reactjs中将HTML表格复制到剪贴板

    我的 React 项目中有一个 HTML 表 我想将表格复制到剪贴板 table thead th Amount th th Charges th thead tbody tr item Amount tr tr item Charges
  • 仅当字段存在时才按字段排序

    我试图获取所有用户 并按另一个表上的字段对它们进行排序 但是该字段并不总是存在 用户 持有用户 用户元 保存元数据 特别是 权重 这是我想要排序的 一个更具体的解决方案是自动定义它们的默认权重 但是我是否可以让它在没有权重的情况下工作 当前
  • golang 服务器上的 CORS 和 javascript 获取前端

    我有一个 golang HTTP 服务器 代码如下 http HandleFunc login func w http ResponseWriter r http Request log Println New incoming reque
  • 制作用户定义的类 std::to_string-able

    我知道 Java 或 C 似乎太多了 但是 是否有可能 好 明智地使我自己的类有效作为函数的输入std to string 例子 class my class public std string give me a string of yo
  • 来自模板化对象的 Java 8 函数式构造函数

    我正在使用 Eclipse Luna Service Release 2 4 4 2 Java 8 u51 我正在尝试创建一个方法 该方法将根据另一个方法参数创建传递的对象的实例 原型简化为 public
  • 如何使用不可变数据类型实现 DFS

    我正在尝试找出一种 Scala 风格的图形遍历方式 最好使用 val 和不可变数据类型 鉴于下图 val graph Map 0 gt Set 1 1 gt Set 2 2 gt Set 0 3 4 3 gt Set 4 gt Set 3