В настоящее время переводится взвешенный код DAG на C, написанный на языке Go и топологически отсортированный.На самом деле я пропустил одну часть кода, которая является функцией ниже образца.Я не мог понять, что такое декларация о посещении.Это объявление функции в другой функции?Если вы объясните синтаксис Си, это было бы здорово.
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
}