我正在C中构造一个图(无方向)。图节点是结构:

struct graphNode{
    int val;
    int neighborCount;
    struct graphNode *neighbors[MaxN]; //this is adjacency list
}

现在,我必须动态初始化一个图的n个节点,否则我需要一个结构数组graphNodes。然后,对于每个节点,我必须首先将邻居数组初始化为空。我稍后会在添加节点时向其添加邻居。用给定的需求定义图的正确方法是什么?我已经做了以下的工作,但我认为这是不对的。我是新来的C。
struct graphNode *createGraph(int nodes){
        struct graphNode *graph = malloc(nodes * sizeof(*graph));
        for(int i=0;i<MAXN;i++){
                graph[i]->n = malloc(MAXN * sizeof(struct graphNode *));
        }
        return graph;
}

最佳答案

由于graphNode结构包含相邻指针数组,您只需为graphNode数组分配空间,这是第一个malloc所做的。
假设您希望所有的邻居指针都初始化为NULL,那么我将把malloc改为calloc(这将使内存自动归零)。结果代码如下所示

struct graphNode *createGraph(int nodes){
    struct graphNode *graph = calloc(nodes, sizeof(*graph));
    return graph;
}

关于c - 在C中动态定义图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34710576/

10-12 19:57