-  首先,定义了一些基本的数据结构和常量: - VertexType和- EdgeType分别用于表示图中的顶点和边的权重。
- MAXVEX定义了图中最大顶点数为100。
- INFINITY用于表示顶点之间没有直接的边相连,这里用65535作为无穷大的表示。
 
-  定义了一个图的结构体 MGraph:- vexs数组用于存储图中的顶点。
- arc数组用于存储图中的边的权重,是一个二维数组,表示邻接矩阵。
- numNodes和- numEdges分别表示图中的顶点数和边数。
 
-  CreateMGraph函数用于创建图:- 首先,通过 scanf_s函数从用户那里获取顶点数和边数。
- 然后,通过循环读取每个顶点的值。
- 接着,初始化邻接矩阵,将所有顶点之间的权重设置为 INFINITY,表示它们之间没有直接的边。
- 之后,通过循环读取每条边的信息,包括边的两个顶点的下标和权重,并将这些信息存储到邻接矩阵中。
- 如果输入的顶点下标超出了范围,程序会打印错误信息并退出。
 
- 首先,通过 
-  PrintMGraph函数用于打印图的信息:- 通过两层嵌套循环遍历邻接矩阵,并打印出每个顶点之间的权重。
- 如果权重为 INFINITY,则打印出 "∞" 表示这两个顶点之间没有直接的边。
 
-  main函数是程序的入口点:- 首先,声明了一个 MGraph类型的变量G。
- 然后,调用 CreateMGraph函数创建图。
- 最后,调用 PrintMGraph函数打印图的信息。
 
- 首先,声明了一个 
#include <stdio.h>
#include <cstdlib>typedef char VertexType;
typedef int EdgeType;
#define MAXVEX 100
#define INFINITY 65535typedef struct {VertexType vexs[MAXVEX];EdgeType arc[MAXVEX][MAXVEX];int numNodes, numEdges;
}MGraph;void CreateMGraph(MGraph* G) {int i, j, k, w;printf("输入顶点数和边数:\n");scanf_s("%d,%d", &G->numNodes, &G->numEdges);for (i = 0; i < G->numNodes; i++)scanf_s(&G->vexs[i]);for (i = 0; i < G->numNodes; i++)for (j = 0; j < G->numNodes; j++)G->arc[i][j] = INFINITY;for (k = 0; k < G->numEdges; k++) {printf("输入边(vi,vj)上的下标i,下标j和权w:\n");scanf_s("%d,%d,%d", &i, &j, &w);if (i < 0 || i >= G->numNodes || j < 0 || j >= G->numNodes) {printf("顶点下标超出范围。\n");exit(EXIT_FAILURE);}G->arc[i][j] = w;G->arc[j][i] = G->arc[i][j];}}void PrintMGraph(MGraph G) {int i, j;printf("图的顶点和边如下:\n");for (i = 0; i < G.numNodes; i++) {for (j = 0; j < G.numNodes; j++) {if (G.arc[i][j] == INFINITY)printf("∞\t");elseprintf("%d\t", G.arc[i][j]);}printf("\n");}
}int main() {MGraph G;CreateMGraph(&G);PrintMGraph(G);return 0;
}结果如下:

