程序实现图结构

来源:互联网 发布:笛子品牌及价格知乎 编辑:程序博客网 时间:2024/05/22 11:33
#include <stdio.h>#define VERTEX_MAX 26#define MAXVALUE 99999typedef struct{char Vertex[VERTEX_MAX];//保存顶点信息,序号或字母int Edges[VERTEX_MAX][VERTEX_MAX];//保存边的权int isTrav[VERTEX_MAX];//遍历标志int VertexNum;//顶点的数量int EdgeNum;//边的数量int GraphType;//图的类型,0:无向图;1:有向图}MatrixGraph;void CreateMatrixGraph(MatrixGraph *G);//创建邻接矩阵图void OutMatrix(MatrixGraph *G);//输出邻接矩阵/************************************************************************  函数名称:CreateMatrixGraph  函数功能:创建邻接矩阵图函数参数:G是定义的图结构的指针函数返回:无 ************************************************************************/void CreateMatrixGraph(MatrixGraph *G){int i, j, k, weight;char start, end;printf("输入各个顶点的信息\n");for (i = 0; i < G->VertexNum; i++){getchar();printf("第%d个顶点:", i+1);scanf("%c", &(G->Vertex[i]));}printf("输入构成各边的两个顶点及权值(用逗号分隔):\n");for (k = 0; k < G->EdgeNum; k++){getchar();printf("第%d条边:", k+1);scanf("%c,%c,%d", &start, &end, &weight);for (i = 0; start != G->Vertex[i]; i++);//在已有顶点中查找起始点for (j = 0; end != G->Vertex[j]; j++);//在已有顶点中查找终点G->Edges[i][j] = weight;if (G->GraphType == 0)G->Edges[j][i] = weight;}}/************************************************************************  函数名称:OutMatrix  函数功能:输出邻接矩阵函数参数:G是定义的图结构的指针函数返回:无 ************************************************************************/void OutMatrix(MatrixGraph *G){int i, j;for (j = 0; j < G->VertexNum; j++){printf("\t%c", G->Vertex[j]);}printf("\n");printf("      ------------------------------------\n");for (i = 0; i < G->VertexNum; i++){printf("    %c |", G->Vertex[i]);for (j = 0; j < G->VertexNum; j++){if (G->Edges[i][j] == MAXVALUE)printf("\t∞");elseprintf("\t%d", G->Edges[i][j]);}printf("\n");}printf("\n");}/************************************************************************  函数名称:main  函数功能:测试图函数参数:无函数返回:0表示成功************************************************************************/int main(){MatrixGraph G;int i, j;printf("输入生成图的类型(0:无向图,1:有向图):");scanf("%d", &G.GraphType);printf("输入图的顶点数量和边数量:");scanf("%d,%d", &G.VertexNum, &G.EdgeNum);//清空矩阵for (i = 0; i < G.VertexNum; i++)for (j = 0; j < G.VertexNum; j++)G.Edges[i][j] = MAXVALUE;CreateMatrixGraph(&G);printf("邻接矩阵数据如下:\n");OutMatrix(&G);getchar();getchar();return 0;}



0 0
原创粉丝点击