【发布时间】:2015-05-23 18:10:39
【问题描述】:
我有一个相当简单的问题。我用 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 我写了
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。
为什么?
【问题讨论】:
-
顺便说一句
void main()不好;请改用int main(void)。 -
printf("there are % edges.\n",num_of_edges);的格式说明符有误,应为%d。 -
天哪……错过了真是太糟糕了。
-
我认为,大多数严格设置的编译器都会接受这一点。