数据结构_邻接矩阵(C语言)

时间:2025-01-30 07:22:27
#include<> #include<> #define MaxVex 10 #define INF 65535 typedef char VertexType; // 顶点的数据类型 typedef int EdgeType; // 边的数据类型 typedef struct { VertexType *vertexs; // 一维数组存放顶点数据 EdgeType **edges; // 二维数组存放边的数据 int numVertexs, numEdges;//顶点数、边数 }AMGraph; // 初始化领接矩阵 void InitAMGraph(AMGraph *G) { // 初始化顶点一维数组 G->vertexs = (VertexType *)malloc(MaxVex*sizeof(VertexType)); // 初始化边的二维数组 int i, j; G->edges = (EdgeType **)malloc(MaxVex*sizeof(EdgeType *)); for (i = 0; i < MaxVex; i++) { G->edges[i] = (EdgeType *)malloc(MaxVex*sizeof(EdgeType)); // 初始化所有边 for ( j = 0; j < MaxVex; j++) { if (i == j) { G->edges[i][j] = 0; // 对角线初始位为0 } else { G->edges[i][j] = INF; // 初始化为无穷大 } } } // 初始化顶点和边的数量 G->numVertexs = 0; G->numEdges = 0; printf("已初始化邻接矩阵!\n"); } // 创建领接矩阵 void CreateAMGraph(AMGraph *G) { printf("请输入顶点数和边数:"); scanf("%d %d", &G->numVertexs, &G->numEdges); int i, j, k, weight; // 输入顶点数据 for (i = 0; i < G->numVertexs; i++) { fflush(stdin); printf("请输入第%d个顶点数据:", i + 1); scanf("%c", &G->vertexs[i]); } // 输入边的权值 for (k = 0; k < G->numEdges; k++) { printf("请输入第%d条边的两顶点及其权值:", k + 1); scanf("%d %d %d", &i, &j, &weight); G->edges[i - 1][j - 1] = weight; // 无向图中,边的两个方向权值相同 G->edges[j - 1][i - 1] = weight; } printf("已完成邻接矩阵的创建!\n"); } // 打印领接矩阵 void DisplayAMGraph(AMGraph G) { int i, j; printf("\t"); for (i = 0; i < G.numVertexs; i++) { printf("%c\t", G.vertexs[i]); } printf("\n"); for (i = 0; i < G.numVertexs; i++) { printf("%c\t", G.vertexs[i]); for (j = 0; j < G.numVertexs; j++) { if (G.edges[i][j] == INF) { printf("∞\t"); } else { printf("%d\t", G.edges[i][j]); } } printf("\n"); } } int main() { AMGraph G; InitAMGraph(&G); CreateAMGraph(&G); DisplayAMGraph(G); system("pause"); return 0; }