MGraph* CreateGraph() { MGraph *G; int i,j,k; G=(MGraph*)malloc(sizeof(MGraph));这个什么意思
时间: 2023-11-18 11:04:28 浏览: 52
这段代码定义了一个名为 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表示所有顶点都没有被访问过。
如何写出包含四种图的创建void Create_MGraph(MGraph *G)
可以通过用户输入图的相关信息,创建对应的图。代码如下:
```c
void Create_MGraph(MGraph *G) {
printf("请输入图的类型:\n");
Graph_Kind(G->kind); // 调用上面的函数,输出图的类型名称
printf("请输入图的顶点数和边数:\n");
scanf("%d %d", &G->vexnum, &G->arcnum);
printf("请输入图的各个顶点:\n");
for(int i = 0; i < G->vexnum; i++) {
scanf("%s", G->vexs[i]);
}
printf("请输入图的各个边及其权值:\n");
for(int i = 0; i < G->vexnum; i++) {
for(int j = 0; j < G->vexnum; j++) {
G->arcs[i][j].adj = INFINITY; // 初始化为无穷大
G->arcs[i][j].info = NULL; // 初始化为空
}
}
for(int k = 0; k < G->arcnum; k++) {
char v1[MAX_VERTEX_NUM], v2[MAX_VERTEX_NUM];
VRType w;
printf("请输入第%d条边的顶点及其权值:\n", k+1);
scanf("%s %s %d", v1, v2, &w);
int i = LocateVex(*G, v1);
int j = LocateVex(*G, v2);
G->arcs[i][j].adj = w;
if(G->kind == UDG || G->kind == UDN) { // 如果是无向图或无向网,对称位置也要赋值
G->arcs[j][i] = G->arcs[i][j];
}
}
}
```
其中,MGraph是一个结构体,包含图的类型、顶点数、边数、各个顶点和各个边及其权值。在函数中,首先要求用户输入图的类型、顶点数和边数,然后输入各个顶点和各个边及其权值。具体实现时,需要用到LocateVex函数,用于查找顶点在图中的位置。