C 中图的连通分量
Connected Components of a Graph in C
我正在创建一个程序,我给它一个图表,其中输入是:
(请忽略第一行输入)第二行总是输入两个整数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 的 return。但我不确定,我不能自己解决这个问题。你能帮我吗?非常感谢!
这是我的代码:
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);
会起作用。
问题是 dfs 正在返回一个 int,然后您试图将该 int 分配给一个数组。尝试:
visitados[i] = dfs(1, vertices, visitados, matriz);
我正在创建一个程序,我给它一个图表,其中输入是:
(请忽略第一行输入)第二行总是输入两个整数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 的 return。但我不确定,我不能自己解决这个问题。你能帮我吗?非常感谢!
这是我的代码:
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);
会起作用。
问题是 dfs 正在返回一个 int,然后您试图将该 int 分配给一个数组。尝试:
visitados[i] = dfs(1, vertices, visitados, matriz);