MGraph G;是定义一个图吗
时间: 2024-05-14 10:18:35 浏览: 159
是的,MGraph是一个结构体类型,通常用于表示图的邻接矩阵。定义一个MGraph类型的变量G,可以创建一个图的邻接矩阵。例如:
```c
typedef struct {
char vexs[MAXVEX]; // 顶点表
int arc[MAXVEX][MAXVEX]; // 邻接矩阵,可看作边表
int numVertexes, numEdges; // 图中当前的顶点数和边数
}MGraph;
MGraph G; // 定义一个图
```
上述代码定义了一个包含顶点表vexs、邻接矩阵arc、当前顶点数numVertexes和边数numEdges的图G。其中,MAXVEX表示顶点数的最大值。通过这个定义,我们可以使用MGraph类型的变量G来操作图的相关信息。
相关问题
本题要求建立一个无向图,采用邻接矩阵做为存储结构。 例如 image.png 函数接口定义: void CreatMGraph(MGraph &G);//创建图G int locate(MGraph G,char v);//返回顶点v的下标 G 为图,采用邻接矩阵存储结构,v 是顶点的值。
根据函数接口定义和题目要求,可以参考以下代码实现创建无向图并用邻接矩阵存储:
```c++
#include <iostream>
using namespace std;
#define MAX_VERTEX_NUM 100 // 最大节点数
// 邻接矩阵存储的图结构体
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 顶点集合
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵,记录边信息
int vexnum, arcnum; // 图的顶点数和边数
} MGraph;
// 返回顶点 v 的下标,如果不存在返回 -1
int locate(MGraph G, char v)
{
for (int i = 0; i < G.vexnum; i++) {
if (G.vexs[i] == v) {
return i;
}
}
return -1;
}
// 创建无向图
void CreatMGraph(MGraph& G)
{
cout << "请输入节点数和边数:" << endl;
cin >> G.vexnum >> G.arcnum;
cout << "请输入节点信息:" << endl;
for (int i = 0; i < G.vexnum; i++) {
cin >> G.vexs[i];
}
// 初始化邻接矩阵
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = 0; // 初始值为 0,表示没有边相连
}
}
cout << "请输入边信息:" << endl;
for (int k = 0; k < G.arcnum; k++) {
char v1, v2;
cout << "请输入第" << k + 1 << "条边的两个端点:" << endl;
cin >> v1 >> v2;
int i = locate(G, v1);
int j = locate(G, v2);
if (i == -1 || j == -1) {
cout << "输入的节点信息有误!" << endl;
return;
}
G.arcs[i][j] = 1; // 标记节点 i 和节点 j 相连
G.arcs[j][i] = 1; // 由于是无向图,节点 j 和节点 i 也相连
}
}
int main()
{
MGraph G;
CreatMGraph(G);
// 输出邻接矩阵
cout << "邻接矩阵为:" << endl;
for (int i = 0; i < G.vexnum; i++) {
for (int j = 0; j < G.vexnum; j++) {
cout << G.arcs[i][j] << ' ';
}
cout << endl;
}
return 0;
}
```
注意,在输入边信息时,需要先通过 `locate` 函数找到两个节点在邻接矩阵中的下标,然后将它们标记为相连。由于是无向图,需要同时标记节点 j 和节点 i 相连。
用c语言编写代码:本题要求建立一个无向图,采用邻接矩阵做为存储结构。 函数接口定义: void CreatMGraph(MGraph &G);//创建图G int locate(MGraph G,char v);//返回顶点v的下标
好的,以下是用C语言编写的代码:
```c
#define MAX_VERTEX_NUM 100 // 最大顶点数
#define INFINITY 65535 // 表示无穷大
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 存储顶点信息
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储邻接矩阵
int vexnum, arcnum; // 图的当前顶点数和弧数
} MGraph;
// 创建图
void CreatMGraph(MGraph &G) {
int i, j, k, w;
char v1, v2;
printf("请输入图的顶点数和边数:");
scanf("%d %d", &G.vexnum, &G.arcnum);
// 初始化邻接矩阵
for (i = 0; i < G.vexnum; i++) {
for (j = 0; j < G.vexnum; j++) {
G.arcs[i][j] = INFINITY;
}
}
// 输入顶点信息
printf("请输入图的顶点信息:");
for (i = 0; i < G.vexnum; i++) {
scanf(" %c", &G.vexs[i]);
}
// 输入边信息
printf("请输入图的边信息:\n");
for (k = 0; k < G.arcnum; k++) {
printf("请输入第%d条边的两个顶点和权值:", k + 1);
scanf(" %c %c %d", &v1, &v2, &w);
i = locate(G, v1);
j = locate(G, v2);
G.arcs[i][j] = w;
G.arcs[j][i] = w; // 无向图,因此需要将两个顶点之间的边都设置为同一个权值
}
}
// 返回顶点v的下标
int locate(MGraph G, char v) {
int i;
for (i = 0; i < G.vexnum; i++) {
if (G.vexs[i] == v) {
return i;
}
}
return -1; // 如果找不到顶点v,返回-1
}
```
这段代码实现了创建一个无向图,采用邻接矩阵作为存储结构,函数接口包括`CreatMGraph`和`locate`两个函数。`CreatMGraph`函数用于创建图,包括输入顶点数、边数、顶点信息和边信息,初始化邻接矩阵,并将边权值存储到邻接矩阵中;`locate`函数用于返回顶点v的下标。
阅读全文
相关推荐
















