C 中图的连通分量

标签 c graph depth-first-search

我正在创建一个程序,我给它一个图表,输入是:

(请忽略第一行输入)第二行始终输入两个整数V(1≤V≤1000)和E(1≤E≤5000),分别对应于图的顶点数和边数。以下各行表示 BPA 格式,有一条从 A 到 B 的边,总权重为 P (1 ≤ P ≤ 10000)。

目标是计算连接组件的数量。但我遇到了一个错误:数组类型“int [vertices]”不可分配visitados = dfs(1,vertices,visitados,matriz);

我认为这是因为我使用参数“visitados”调用 dfs,并且我也尝试使用它来保存 dfs 的返回结果。但我不确定,我自己也无法解决这个问题。你能帮我吗?非常感谢!

这是我的代码:

int dfs(int v, int nv, int visited[], int matrix[nv][nv]){
    int i;
    visited[v]=1;
    for(i=1;i<=nv;i++){
            if(matrix[v][i] && !visited[i]){
                visited[i]=1;
                dfs(i, nv, visited, matrix);
            }
    }
    return *visited;
}

int main(){
    int flag;
    scanf("%d", &flag);


    //Number of vertex and edges
    int vertices, arestas;
    scanf("%d %d", &vertices, &arestas);

    //Initialization of matrix
    int i, j, matriz[vertices+1][vertices+1];
    for(i=1;i<=vertices;i++){
        for(j=1;j<=vertices;j++){
            matriz[i][j]=0;
        }
    }

    //Filling of matrix
    int v1, v2, p;
    for(i=0;i<arestas;i++){
        scanf("%d %d %d", &v1, &v2, &p);
        matriz[v1][v2]=p;
    }

    //Initialization of array visitados 
    int visitados[vertices];
    for(i=1;i<=vertices;i++){
        visitados[i]=0;
    }

    //Call of DFS while vertex are not all visited
    int componentes=0;
    for(i=1;i<=vertices;i++){
        if(visitados[i]==0){
            visitados=dfs(1, vertices, visitados, matriz);
            componentes = componentes+1; //Count of calls of DFS
        }
    }

    //Print of number of connected components
    printf("%d", componentes);


    return 0;
}

最佳答案

以下行不正确:

        visitados=dfs(1, vertices, visitados, matriz);

赋值运算符的 LHS 是一个 int 数组,而 RHS 的计算结果是一个 int。像这样的东西:

        visitados[i]=dfs(1, vertices, visitados, matriz);

可以。

关于C 中图的连通分量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27848937/

相关文章:

mysql - mysql查询的优化

C++生成适合TSP的随机图

tree - 树边缘和前边缘之间的区别

c - 在 C 中声明枚举变量的最佳方法是什么?

c - 在linux中使用管道同时写入文件

c - 将 32 位值快速散列到 0 到 254(含)之间

c - 具有 2 个 if 的代码不断给出第一个 if 的结果

graph - A* 算法和游戏

java - 益智游戏安卓DFS算法

python - python中的深度优先搜索算法