【发布时间】:2018-09-23 05:21:26
【问题描述】:
我正在尝试使用邻接矩阵来实现图形,我对二维数组的内存分配感到困惑
对吗G->adj=(int**)malloc(sizeof(G->v*G->V))
或者以下是正确的
#include<stdio.h>
#include<stdlib.h>
struct Graph{
int V;
int E;
int **adj;
};
struct Graph* adjmatrix(){
int u,v,i;
struct Graph* G=(struct Graph*)malloc(sizeof(struct Graph));
if(!G)
printf("Memory Null");
printf("enter the number of vertex and edges");
scanf("%d %d",&G->V,&G->E);
G->adj=(int**)malloc(sizeof(int*)*( G->V * G->V ));
for(u=0;u<G->V;u++){
for(v=0;v<G->V;v++){
G->adj[u][v]=0;
}
}
for(i=0;i<G->V;i++){
printf("reading edge");
scanf("%d %d",&u,&v);
G->adj[u][v]=1;
G->adj[v][u]=1;
}
return G;
}
【问题讨论】:
-
您只分配了一个内存块,而不是二维数组。您甚至不需要 2D 数组,因为它不是锯齿状的,您可以使用 1D 数组来代替它并使其更容易。
-
请先生告诉我代码
-
malloc(sizeof(G->v*G->V))肯定是错误的。同malloc(sizeof(int)) -
你能把答案写在下面,以便我能正确理解
标签: c data-structures graph