我为邻接矩阵图表示编写了以下代码,但代码不起作用。我认为第25行有一些问题,但我无法调试它。请在代码中指出问题。 感谢
#include<iostream>
#include<cstdlib>
using namespace std;
struct Graph{
int V;
int E;
int **adj;
};
struct Graph* adjMatrixForGraph(int vertices,int edges){
int i,j;
Graph *G=(struct Graph*) malloc(sizeof(struct Graph));
//Graph *G=new Graph();
if(!G){
cout<<"Memory error";
}
G->V=vertices;
G->E=edges;
G->adj =(int **) malloc(sizeof(G->V*G->V));
//G->adj =new int*;
for(i=0;i<G->V;i++){
for(j=0;j<G->V;j++){
*(*(G->adj+j)+j)=0;
}
}/*
for(int u=0;u<G->E;u++){
cin>>i>>j;
G->adj[i][j]=1;
G->adj[j][i]=1;
}*/
return G;
}
int main(){
Graph *G=NULL;
G=adjMatrixForGraph(4,4);
return 0;
}
答案 0 :(得分:2)
您没有按
分配两个暗淡的数组G->adj =(int **) malloc(sizeof(G->V*G->V));
相反,你应该做
G->adj =(int **) malloc(G->V*sizeof(int*));
for (int i = 0; i < G->V; ++i) {
*(G->adj+i) = (int*) malloc(G->V*sizeof(int));
}
顺便说一下,使用1-d数组来模拟2-d数组可能更有效,因为内存访问可能比索引计算慢。但这可能是另一回事。