Я считаю, что ваш (сильно отредактирован) исправить это:
int one_to_two(int* a, int x, int y)
{
return a[x*ROWS+y];
}
void dfs(int** G,int i,int *visited) {
int size = ROWS * COLUMNS ;
visited[i]=1;
int j;
for(j=0;j<size;j++) {
if(!visited[j]&& one_to_two(G,i,j) == 1)
dfs(G,j,visited);
}
}
Это, как говорится, я не думаю, что это хорошо структурированный метод решения этой проблема. Я не знаю, почему вы используете рекурсию для этого, итеративный цикл будет намного проще. Этот метод имеет возможность взорвать стек. Здесь вы не используете хвостовую рекурсию, поэтому этот метод вызовет проблемы с памятью, если ROWS или COLUMNS станут очень большими.
Я извиняюсь за свои ошибки, набрав не работает так, как я думал. Это потребует отбрасывания вашего 2-мерного массива указателю int перед его отправкой в функцию. Я не уверен, что мне нравится это решение, оно не очень элегантное, но оно должно, по крайней мере, скомпилировать.
На другой ноте, не совсем уверен, что вы пытаетесь сделать с поиском глубины, но я не думаю, что этот алгоритм делает то, что вы думаете, что он делает (например, malloc не равен нулю память, которую он выделяет, что вызывает особую озабоченность этим алгоритмом)
@mello Я думаю, что последний касается именно вашего вопроса. – vsoftco
Оба варианта, причина, по которой вы получаете эту проблему, связана с несоответствием статического/динамического массива, на эту проблему ответили в обоих связанных ответах. –