Рекурсивный обход в глубину
Дан неориентированный граф без циклов и петель. Необходимо вывести все вершины графа при обходе в глубину. Не совсем понимаю в чем заключается ошибка, программа выводит только первую вершину и заканчивает свою работу.
#include <stdio.h>
void dfsIn(int v, int*used, int n, int mat[n][n]) {
int next;
used[v] == 1;
printf ("%d\n", v);
for(next = 0; next < n; next++)
if( mat[v][next] == 1 && used[next] == 0)
return dfsIn(next, used, n, mat);
}
int main () {
int n, m; //n - vertices, m - edges
scanf ("%d %d", &n, &m);
int i, j, k, l, a[n][n], used[n];
for(i = 0; i < n; i++) {
used[i] == 0;
for(j = 0; j < n; j++)
a[i][j] == 0;
}
for(i = 0; i < m; i++) {
scanf ("%d %d", &k, &l);
a[k-1][l-1] == 1;
a[l-1][k-1] == 1;
}
dfsIn(1, used, n, a);
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Вот как выглядит результат компиляции вашего кода:
$ gcc -std=c11 -pedantic -Wall -Wextra -Werror dfs.c dfs.c: In function ‘dfsIn’: dfs.c:6:13: error: statement with no effect [-Werror=unused-value] 6 | used[v] == 1; | ~~~~~~~~^~~~ dfs.c:10:24: error: ISO C forbids ‘return’ with expression, in function returning void [-Werror=pedantic] 10 | return dfsIn(next, used, n, mat); | ^~~~~~~~~~~~~~~~~~~~~~~~~ dfs.c:4:6: note: declared here 4 | void dfsIn(int v, int*used, int n, int mat[n][n]) { | ^~~~~ dfs.c: In function ‘main’: dfs.c:17:21: error: statement with no effect [-Werror=unused-value] 17 | used[i] == 0; | ~~~~~~~~^~~~ dfs.c:19:25: error: statement with no effect [-Werror=unused-value] 19 | a[i][j] == 0; | ~~~~~~~~^~~~ dfs.c:23:25: error: statement with no effect [-Werror=unused-value] 23 | a[k-1][l-1] == 1; | ~~~~~~~~~~~~^~~~ dfs.c:24:25: error: statement with no effect [-Werror=unused-value] 24 | a[l-1][k-1] == 1; | ~~~~~~~~~~~~^~~~ cc1: all warnings being treated as errors
Исправив указанные ошибки, вы получите работающую программу. Хотя возможности для улучшения ещё будут.