邻接矩阵图表示代码崩溃

时间:2015-06-11 06:50:33

标签: c algorithm data-structures graph

我为邻接矩阵图表示编写了以下代码,但代码不起作用。我认为第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;
}

1 个答案:

答案 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数组可能更有效,因为内存访问可能比索引计算慢。但这可能是另一回事。