gpt4 book ai didi

c - 图邻接矩阵分割错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:53 24 4
gpt4 key购买 nike

我已经为图形邻接矩阵编写了以下代码,但出现了分割错误。我认为 malloc 语句有问题,但我不知道是什么。我该如何解决这个问题?

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

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

struct Graph *adjMatrix()
{
int i,u,v;
struct Graph *G=(struct Graph*)malloc(sizeof(struct Graph));

printf("Enter vetrices and edge\n");
scanf("%d %d",&G->V,&G->E);
G->adj=malloc(sizeof(1)*((G->V) * (G->V)));
for(u=0;u<(G->V);u++)
{
for(v=0;v<(G->V);v++)
{
G->adj[u][v]=0;
}
}
for(i=0;i<(G->E);i++)
{
printf("Enter source vertces and dest vertix ");
scanf("%d %d",&u,&v);
G->adj[u][v]=1;
G->adj[v][u]=1;
}
return G;
}

int main()
{
struct Graph *T=adjMatrix();
printf("%d",T->adj[0][0]);
return 0;
}

最佳答案

这个:

G->adj=malloc(sizeof(1)*((G->V) * (G->V)));

将一个一维平面整数数组分配给一个指针,该指针应该包含一个指向整数的指针数组。 (sizeof(1)sizeof(int) 相同。)

如果您想以 G->adj[u][v] 的形式访问矩阵,则必须为数组的两个维度分配内存。一种方法是分配一个指向 int 的指针数组,然后为每个指针分配一个 int 数组:

G->adj = malloc(sizeof(*G->adj) * G->V);
for (i = 0; i < G->V; i++) {
G->adj[i] = malloc(sizeof(*G->adj[i]) * G->V);
}

您还应该强制用户输入的顶点实际上在邻接矩阵的范围内。

关于c - 图邻接矩阵分割错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33473649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com