问题一
void creatMGraph(int n,int e,MGraph *g,int edge[][MAXV])
{ g=(MGraph*)malloc(sizeof(MGraph));
g->n=n;g->e=e;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g->edges[i][j]=edge[i][j];
}
本想调用这个函数用现有的边数和定点数,以及图的邻接矩阵构建一个图。这个函数中有一个形参是邻接图的指针,但是由于它仅仅是个指针,尚未被分配任何空间,所以我在函数体中调用了malloc函数为其分配一个MGraph大小的空间来存放想要构建的邻接图。注意这个malloc函数实际上是又创造了一个指针变量,以及它所指向的内存空间,因此在将这个变量赋值给g的时候,g是发生了变化的。而指针变量作为函数的形式参数时,虽然我们可以改变其所指向的值,但是并不能改变指针变量本身的值,因此需要在这个指针变量的形参前加一个引用符。改动后如下所示。
void creatMGraph(int n,int e,MGraph *&g,int edge[][MAXV])
{ g=(MGraph*)malloc(sizeof(MGraph));
g->n=n;g->e=e;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g->edges[i][j]=edge[i][j];