关于定义:从Go代码到C的重写算法

时间:2019-05-03 01:33:39

标签: c algorithm go

当前将加权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
}

1 个答案:

答案 0 :(得分:1)

是的,它是一个局部函数定义,closes over marks,因此不值得直接进行翻译。如果您也将其更改为使用marks作为参数,则可以将其转换为普通的静态函数。