我有一个相当简单的问题。我用C语言编写了一个计算机代码,它以一个邻接矩阵的形式得到一个图形,其中图中的每个边都有一个与之相关的数字,如果你愿意的话就是一个权重。
如果边的权重为0,则该边不存在。例如,如果在邻接矩阵的条目(1,2)中为0,那么我们知道顶点1没有连接到顶点2。
到目前为止一切顺利。我的问题是我试图计算出有多少边缘,并且我得到了一个意想不到的值。
int **get_adjacency_matrix(int* num_of_vertices,int *num_of_edges)
{
int i,j,k,**graph,rows=0;
printf("Enter the number of vertices in your connected undirected graph:");
scanf("%d",num_of_vertices);
printf("\nVery important: I assume there are no parallel edges\n");
rows=*num_of_vertices;
graph=(int**)malloc(rows*sizeof(int*));
for(i=0;i<rows;i++)
graph[i]=(int*)malloc((rows-i)*sizeof(int));
printf("Please Enter the upper triangular cost-adjacency matrix\n");
for(i=0;i<rows;i++)
{
for(k=0;k<i;k++)
printf(" "); //blank spaces for readability.
for(j=0;j<rows-i;j++)
{
scanf("%d",&(graph[i][j]));
if(graph[i][j]>0)
(*num_of_edges)++; //edge found
}
}
printf("*num_of_edges = %d",*num_of_edges);
return graph;
}
此代码确实打印出正确的结果。但在我的虚空主要内容我写了
void main()
{
int **graph,num_of_vertices=0,num_of_edges=0,k;
edge *edges_array;
graph=get_adjacency_matrix(&num_of_vertices,&num_of_edges);
printf("there are % edges.\n",num_of_edges);
}
并且该行打印垃圾。奇怪的是,num_of_vertices变量工作正常。
因此,在** get_adjacency_matrix程序中,我的num_of_edges获取了正确的值,但它将错误的值返回给void main。
为什么?
答案 0 :(得分:0)
编辑修改了之前的答案。
声明
printf("there are % edges.\n",num_of_edges);
有一个错误的格式说明符,应为%d
。