【发布时间】:2016-08-03 04:12:11
【问题描述】:
我正在尝试解决来自 UVA 在线法官网站的问题,特别是 539 我需要使用 DFS 来找到最长的路径,我可以强制解决它,但我想在使用 scala 的更实用的惯用方式,问题是当算法从分支返回时,数据结构不会更新以用于其他分支,不想使用 vars,也不想使用副作用,这是我的代码:
type Vertex=Int
type Graph = Map[Vertex,Set[Vertex]]
def DFS(start: Vertex, g: Graph): Int = {
def loop(v: Vertex, visited: List[Vertex], size: Int = 0): Int = {
val neighbours: List[Vertex] = ( g(v) filterNot visited.contains ).toList
if (neighbours == Nil) size
else {
( for (elem <- neighbours) yield loop(elem, v :: visited, size + 1) ).max }
}
loop(start, List())
}
【问题讨论】:
-
看起来您需要将
visited与max一起返回并使用foldLeft而不是for将状态传递给下一个loop并在折叠后返回。 -
你想要 foldLeft 这样的东西传递修改后的
visited吗?编辑:嘿,@VictorMoroz,快点!
标签: algorithm scala data-structures functional-programming depth-first-search