1 #include<stdio.h> 2 #include "matrixGraph.cpp" 3 4 int main(void) { 5 MatrixGraph G;//定义保存邻接矩阵结构的图 6 int i, j; 7 8 printf("请输入生成图的类型(0.无向图, 1.有向图):"); 9 scanf("%d", &G.graphType); 10 printf("请输入图的定点数量和边的数量:"); 11 scanf("%d %d", &G.vertexNum, &G.edgeNum); 12 for (i = 0; i < G.vertexNum; i++) 13 for (j = 0; j < G.edgeNum; j++) 14 G.edge[i][j] = maxValue;//设置矩阵中个元素的值为最大值 15 createMatrixGraph(&G);//创建邻接矩阵保存的图 16 printf("邻接矩阵数据如下:\n"); 17 outMatrix(&G); 18 return 0; 19 } 20 21 void createMatrixGraph(MatrixGraph* G) { 22 int i, j, k, weight; 23 char start, end;//一条边的两个顶点 24 printf("请输入各顶点信息:\n"); 25 for (i = 0; i < G->vertexNum; i++) { 26 getchar();//读入回车,不然%c会读入 27 printf("第%d个顶点:", i + 1); 28 scanf("%c", &G->vertex[i]); 29 } 30 31 printf("请输入构成各边的两个顶点及权值:\n"); 32 for (k = 0; k < G->edgeNum; k++) { 33 getchar();//读入回车,不然%c会读入 34 printf("第%d条边:", k + 1); 35 scanf("%c %c %d", &start, &end, &weight); 36 for (i = 0; start != G->vertex[i]; i++);//在已有定点中查找始结点 37 for (j = 0; end != G->vertex[j]; j++);//查找末尾结点 38 G->edge[i][j] = weight;//对应位置保存权值,表示有一条边 39 if (!G->graphType) G->edge[j][i] = weight;//若是无向图,则邻接矩阵关于对角线位置,也应该有一条边 40 } 41 } 42 43 void outMatrix(MatrixGraph* G) { 44 int i, j; 45 46 for (i = 0; i < G->vertexNum; i++) printf("\t%c", G->vertex[i]);//在第一行输出顶点信息 47 printf("\n"); 48 for (i = 0; i < G->vertexNum; i++) { 49 printf("%c", G->vertex[i]); 50 for (j = 0; j < G->vertexNum; j++) { 51 if (G->edge[i][j] == maxValue) printf("\t∞"); 52 else printf("\t%d", G->edge[i][j]);//输出边的权值 53 } 54 printf("\n"); 55 } 56 }
其中 "matrixGraph''文件内容如下
1 #define vertex_max 26 2 #define maxValue 32767 3 typedef struct { 4 char vertex[vertex_max];//储存定点信息 5 int edge[vertex_max][vertex_max];//存储边的权的矩阵 6 int isTrav[vertex_max];//遍历标志 7 int vertexNum;//点的数目 8 int edgeNum;//边的数目 9 int graphType;//图的类型,0表示无向图,1表示有向图 10 }MatrixGraph; 11 12 void createMatrixGraph(MatrixGraph* G);//创建邻接矩阵 13 void outMatrix(MatrixGraph* G);//输出邻接矩阵