当前将加权DAG转换为以Go语言编写并经过拓扑排序的C代码。实际上,我错过了下面示例中的函数的一部分代码。我无法获得“访问”声明。它是另一个函数中的函数声明吗?如果您使用C语法进行解释,那就太好了。
func (g *graph) topoSort() []int {
result := make([]int, g.size())
marks := make([]bool, g.size())
resultIndex := g.size() - 1
var visit func(int)
visit = func(u int) {
for _, item := range g.adjList[u] {
if !marks[item.vertex] {
visit(item.vertex)
}
}
marks[u] = true
result[resultIndex] = u
resultIndex--
}
for u := range g.adjList {
if !marks[u] {
visit(u)
}
}
return result
}
答案 0 :(得分:1)
是的,它是一个局部函数定义,closes over marks
,因此不值得直接进行翻译。如果您也将其更改为使用marks
作为参数,则可以将其转换为普通的静态函数。