请使用c语言帮我把下面代码缺失的部分补充完整请注意:度指的是与该节点相连的边的条数:#include stdioh#include stdlibh#include stringh# define max_dis 100000typedef char vextype20;typedef struct int N E;N是顶点数E是边数 int matrix;储存邻接矩阵 vext
完整代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h>
define max_dis 100000
typedef char vextype[20];
typedef struct { int N, E;//N是顶点数,E是边数 int** matrix;//储存邻接矩阵 vextype* vertex;//存储节点的名字 } Graph;
Graph createGraph(int n); void nodeDegree(Graph g, int* node_degree); double clusteringCoefficient(Graph g);
/**
- 创建一个节点数为n的图
- @param n 节点个数
- @return 返回这个图 / Graph createGraph(int n) { int i, j; Graph g; g.N = n; g.matrix = (int*)malloc(sizeof(int*) * g.N); for (i = 0; i < n; i++) { g.matrix[i] = (int*)malloc(sizeof(int) * g.N); } for (i = 0; i < g.N; i++) { for (j = 0; j < g.N; j++) { g.matrix[i][j] = max_dis; } } for (i = 0; i < g.N; i++) { g.matrix[i][i] = 0; } g.vertex = (vextype*)malloc(sizeof(vextype) * g.N); return g; }
/**
- 计算每个点的度
- @param g 图
- @param node_degree 将每个点的度写到这个数组中 */ void nodeDegree(Graph g, int *node_degree) { int i,j; for(i=0;i<g.N;i++){ int degree=0; for(j=0;j<g.N;j++){ if(g.matrix[i][j]!=max_dis){ degree++; } } node_degree[i]=degree; } }
/**
- 计算图的聚类系数
- @param g 图
- @return 返回聚类系数 / double clusteringCoefficient(Graph g) { int i,j,k; int sum=0; for(i=0;i<g.N;i++){ int degree=0; for(j=0;j<g.N;j++){ if(g.matrix[i][j]!=max_dis){ degree++; } } if(degree>=2){ int count=0; for(j=0;j<g.N;j++){ for(k=0;k<g.N;k++){ if(j!=i&&k!=i&&g.matrix[j][i]!=max_dis&&g.matrix[i][k]!=max_dis&&g.matrix[j][k]!=max_dis){ count++; } } } sum+=count/(degree(degree-1)/2); } } return (double)sum/g.N; }
int main() { int node_num; int edge_num;
scanf("%d %d", &node_num, &edge_num);
Graph g = createGraph(node_num);
for(int i = 0; i < node_num; i++) {
sprintf(g.vertex[i], "%d", i);
}
for (int i = 0; i < edge_num; i++) {
int start_idx, end_idx, weight;
scanf("%d %d %d", &start_idx, &end_idx, &weight);
g.matrix[start_idx][end_idx] = weight;
g.matrix[end_idx][start_idx] = weight;
}
int *degree = (int *)malloc(sizeof(int) * g.N);
nodeDegree(g, degree);
printf("degree distribution:\n");
for(int i=0; i<g.N; i++)
{
printf("node%s:%d,", g.vertex[i], degree[i]);
}
printf("\n");
double c = clusteringCoefficient(g);
printf("clustering coefficient:%f\n", c);
return 0;
原文地址: https://www.cveoy.top/t/topic/eCuS 著作权归作者所有。请勿转载和采集!