MGraph* CreateGraph() { MGraph *G; int i,j,k; G=(MGraph*)malloc(sizeof(MGraph));这个什么意思
时间: 2023-11-18 10:04:28 浏览: 133
这段代码定义了一个名为 CreateGraph 的函数,该函数返回一个 MGraph 类型的指针。
在函数内部,首先定义了一个指向 MGraph 结构体的指针 G,然后使用 malloc 函数给 G 分配了一块大小为 MGraph 结构体大小的动态内存空间。
最后,函数返回指向 G 的指针。
这个函数的作用是创建一个空的基于邻接矩阵的图,并返回一个指向该图的指针,供后续的图操作使用。
相关问题
MGraph* CreateGraph() { MGraph *G; int i,j,k; G=(MGraph*)malloc(sizeof(MGraph)); //初始化访问标志 for(i=0;i<G->v;i++){ G->vexs[i].park=0; }什么意思
这段代码是在 CreateGraph 函数中,为图中的每个顶点的访问标志进行了初始化。
在函数内部,首先定义了一个指向 MGraph 结构体的指针 G,然后使用 malloc 函数给 G 分配了一块大小为 MGraph 结构体大小的动态内存空间。
接着,使用 for 循环遍历图中的每个顶点,将它们的访问标志 park 初始化为0,表示它们还没有被访问过。
这个操作是为了在后续的图遍历操作中,可以通过访问标志来判断每个顶点是否已经被访问过。初始化为0表示所有顶点都没有被访问过。
#include <stdio.h> typedef enum {false, true} bool; #define MaxVertexNum 10 #define INFINITY 65535 typedef int Vertex; typedef int WeightType; typedef struct GNode *PtrToGNode; struct GNode{ int Nv; int Ne; WeightType G[MaxVertexNum][MaxVertexNum]; }; typedef PtrToGNode MGraph; bool Visited[MaxVertexNum]; MGraph CreateGraph(); void Visit( Vertex V ) { printf(" %d", V); } void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ); int main() { MGraph G; Vertex V; G = CreateGraph(); scanf("%d", &V); printf("DFS from %d:", V); DFS(G, V, Visit); return 0; } void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ) { int i; Visit(V); Visited[V]=true; for(i=0;i<MaxVertexNum;i++) { if(Graph->G[V][i]!=0 && Visited[i]!=true) { DFS(Graph,i,Visit); } } }这段代码有什么问题
这段代码存在以下问题:
1. 在定义枚举类型时,应该把 true 定义为 1,false 定义为 0,否则在使用该枚举类型时可能会出现问题。
2. 在定义结构体时,应该将结构体名称放在结构体内部,而不是外部。
3. 在遍历图时,应该遍历所有的顶点,而不是仅仅遍历 MaxVertexNum 个顶点。可以通过 Graph->Nv 获取顶点个数。
下面是修改后的代码:
```c
#include <stdio.h>
typedef enum {false = 0, true = 1} bool;
#define MaxVertexNum 10
#define INFINITY 65535
typedef int Vertex;
typedef int WeightType;
typedef struct GNode{
int Nv;
int Ne;
WeightType G[MaxVertexNum][MaxVertexNum];
} *PtrToGNode;
typedef PtrToGNode MGraph;
bool Visited[MaxVertexNum];
MGraph CreateGraph();
void Visit(Vertex V) {
printf(" %d", V);
}
void DFS(MGraph Graph, Vertex V, void (*Visit)(Vertex));
int main() {
MGraph G;
Vertex V;
G = CreateGraph();
scanf("%d", &V);
printf("DFS from %d:", V);
DFS(G, V, Visit);
return 0;
}
void DFS(MGraph Graph, Vertex V, void (*Visit)(Vertex)) {
int i;
Visit(V);
Visited[V] = true;
for (i = 0; i < Graph->Nv; i++) {
if (Graph->G[V][i] != 0 && Visited[i] != true) {
DFS(Graph, i, Visit);
}
}
}
MGraph CreateGraph() {
int N, M;
Vertex V, W;
WeightType Weight;
MGraph Graph;
Graph = (MGraph)malloc(sizeof(struct GNode));
scanf("%d", &(Graph->Nv));
scanf("%d", &(Graph->Ne));
for (V = 0; V < Graph->Nv; V++) {
for (W = 0; W < Graph->Nv; W++) {
Graph->G[V][W] = 0;
}
}
for (M = 0; M < Graph->Ne; M++) {
scanf("%d %d %d", &V, &W, &Weight);
Graph->G[V][W] = Weight;
Graph->G[W][V] = Weight;
}
return Graph;
}
```
阅读全文