doumaogui5937 2019-05-03 01:33 采纳率: 100%
浏览 45
已采纳

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

Currently translating weighted DAG to C code which is written in Go language and topologically sorted. Actually I missed one part of the code that is the function below sample. I couldn't get what "visit" declaration is. Is it function declaration within another function ? If you explain in C syntax that would be great.

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条回答 默认 最新

  • dongyuans61046 2019-05-03 01:44
    关注

    Yes, it's a local function definition, and it closes over marks, which makes it not worth translating directly. You can transform it to an ordinary static function if you also change it to take marks as an argument.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?