reBertran Ответов: 1

Как мне перевести этот пример, написанный в коде 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, как я описал выше.

1 Ответов

Рейтинг:
1

Christian Graus

В C нет среза массива. Вам придется создать новый массив.

Visit - Язык Программирования Go[^][^]


Исходный код функции visit находится здесь, поэтому я предполагаю, что вы можете понять, что она делает отсюда


reBertran

Я знаю, что в C нет процессов нарезки, но есть ( код Go), и не получил его должным образом о процессе выше.

Christian Graus

Срез массива - это сечение. Создайте новый массив.

reBertran

Можете ли вы более правильно определить эти переменные rowIndex, row и number в псевдо-или Си-коде ?

Christian Graus

Я не вижу кода в вашем примере, делающего срез. Я не понимаю вашего вопроса

reBertran

http://xra.sh/project-euler-problems-18-and-67 на нем есть целый код, если вы посмотрите и не преобразовали его для циклов в main() в код C должным образом.

Christian Graus

Слово "срез" также не появляется на этой странице