Как мне перевести этот пример, написанный в коде go, в код C ?
В настоящее время переводится взвешенный DAG в код C, который написан на языке Go и топологически отсортирован. На самом деле я пропустил пару частей кода, который является кодом ниже примера. В функции topoSort я не мог понять, что такое декларация "визит". Является ли это объявление функции внутри другой функции ? Другая часть заключается в том, что в основной функции, которую вы увидите ниже, не удалось получить процессы нарезки с ключевым словом range в циклах. Если вы переведете на синтаксис Си грубо или кратко, это будет здорово.
// топосорт()
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 }
// главный()
i := 0 for rowIndex, row := range input { for _, number := range row { if rowIndex+1 >= len(input) { // Last row. g.addEdge(i, vertexesQuantity, number) } else { // Not the last row. g.addEdge(i, i + rowIndex + 1, number) g.addEdge(i, i + rowIndex + 2, number) } i++ } }
Что я уже пробовал:
Я сделал это и преобразовал базовую графическую ( взвешенную DAG ) структуру из этого образца, и в этом нет никаких проблем. Я просто боролся с этими двумя функциями, чтобы преобразовать их в код C, как я описал выше.