#include <stdio.h> #include <stdlib.h> #include <string.h> typedef char VertexType[5]; //存储顶点值 #define MaxSize 50 #define INIT 10000 typedef struct //邻接矩阵,存储弧的信息 { int adj; }ArcNode,AdjMatrix[MaxSize][MaxSize]; typedef struct //图的类型定义 { VertexType vex[MaxSize]; //存储顶点值 AdjMatrix arc; //邻接矩阵 int arcnum,vexnum; //前者弧数,后者顶点数 }MGraph; void CreateVertex(MGraph *G) //创建邻接矩阵 { int i,j,k,w; VertexType v1,v2; printf("请输入有向带权图的顶点数和弧数:(空格间隔)\n"); scanf("%d%d",&(*G).vexnum,&(*G).arcnum); printf("请输入%d个顶点的值:\n",G->vexnum); for ( i=0 ; i<G->vexnum ; i++ ) { scanf("%s",&G->vex[i]); } for ( i=0 ; i<G->vexnum ; i++ ) //初始化邻接矩阵 { for ( j=0 ; j<G->vexnum ; j++ ) { G->arc[i][j].adj = INIT; } } printf("请输入%d条弧的弧尾,弧头和权值:\n",G->arcnum); for ( k=0 ; k<G->arcnum ; k++ ) { scanf("%s%s%d",v1,v2,&w); i = LocateVertex(*G,v1); j = LocateVertex(*G,v2); G->arc[i][j].adj = w; } } int LocateVertex(MGraph G,VertexType v) //索引 { int i; for ( i=0 ; i<G.vexnum ; i++ ) { if ( strcmp(G.vex[i],v) == 0 ) { return i; } } return -1; } void DisplayVertex(MGraph G) //输出 { int i,j; printf("%d个顶点的值为:",G.vexnum); for ( i=0 ; i<G.vexnum ; i++ ) { printf("%s ",G.vex[i]); } printf("\n有向带权图\n"); printf("序号:"); for ( i=0 ; i<G.vexnum ; i++ ) { printf("%8d",i); } printf("\n"); for ( i=0 ; i<G.vexnum ; i++ ) { printf("%8d",i); for ( j=0 ; j<G.vexnum ; j++ ) { printf("%8d",G.arc[i][j].adj); } printf("\n"); } } int main(void) { MGraph G; printf("创建图:\n"); CreateVertex(&G); printf("输出图:"); DisplayVertex(G); printf("\n"); return 0; }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。