图的邻接矩阵

时间:2016-05-27 20:59:00

标签: data-structures graph dynamic-arrays adjacency-matrix

我正在编写一个用于实现图形的Adjacency Matrix的代码。但是我收到运行时错误。任何人都可以建议我错在哪里?

代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct Graph{
    int V;
    int E;
    int **Adj;
};

void test(struct Graph *graph)
{
    graph->E = 5;
    graph->V = 4;
    graph->Adj = malloc(sizeof(graph->V * graph->V));
    graph->Adj[0][0] = 9;
    graph->Adj[0][1] = 7;
    graph->Adj[0][2] = 2;
    graph->Adj[0][3] = 5;
    printf("Hello %d\n",graph->Adj[0][2]);    
}
int main()
{
    struct Graph *graph = malloc(sizeof(struct Graph));
    test(graph); 
}

如果我在主要功能中做同样的事情就行了。我在编写测试功能时不明白我做错了什么?

在main函数中完成代码:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

struct Graph{
    int V;
    int E;
    int **Adj;
};


int main()
{
    struct Graph *graph = malloc(sizeof(struct Graph));
    graph->E = 5;
    graph->V = 4;
    graph->Adj = malloc(sizeof(graph->V * graph->V));
    graph->Adj[0][0] = 9;
    graph->Adj[0][1] = 7;
    graph->Adj[0][2] = 2;
    graph->Adj[0][3] = 5;
    printf("Hello %d\n",graph->Adj[0][2]);

}

获取运行时错误。对test function进行调试时,它会一直运行到graph->Adj = malloc(sizeof(graph->V * graph->V));,但在graph->Adj[0][0] = 9;它会出错。为什么???

1 个答案:

答案 0 :(得分:0)

你做错了malloc。您正在使用指向指针的指针。因此,您必须首先使用malloc来动态分配数组指针。然后你必须为每一行分配它。

试试这个:

 graph->Adj = (int **)malloc(graph->v * sizeof(int *));
    for (i=0; i<graph->v; i++)
         graph->Adj[i] = (int *)malloc(graph->v * sizeof(int));
相关问题