
实训七图的建立与存储一、实训目的1、通过实训,掌握图的建立与存储二、实训内容1、练习用图的邻接矩阵表示法存储图2、练习用图的邻接链表表示法存储图三、实训前的准备1、复习课本的相关内容2、阅读实训指导书3、准备好相关的程序清单四、实训步骤与方法1、图的邻接矩阵表示法算法如下,通过如下算法,完成图的建立#include#include#includeMGRAPH create_mgraphO《/*建立图的邻接矩阵*/int i,j,k;MGRAPH mg;mg.kind=2;printf("\n\n输入顶点数和边数(用逗号隔开):");scanf("%d,%d",&i,&j);fflush(stdin) ;

mg. vexnum=i :mg.arcnum=j;printf("\n\n");for(i=0;i(printf("输入顶点%d的值:",i+1);scanf("%d",&mg.vexs[i]);fflush(stdin):)for(i=0:ifor (j=O:jmg. arcs[i][j]=0:for (k=1;kmg. vexnum| | jmg. vexnum)【printf("输入错,重新输入:");scanf("%d,%d",&i,&j):)mg.arcs[i-1] [j-1]=1;mg. arcs[j-1][i-1]=1:]return mg;1main ()2、图的邻接链表表示法算法如下,通过如下算法,完成图的建立#include

#include#includeADJGRAPH creat_adjgraphO (EDGENODE*p;inti,s,d;ADJGRAPH adjg:adjg.kind = 2:printf("Inln输入顶点数和边数(用逗号隔开):");scanf("%d,%d",&s,&d);fflush(stdin);adjg. vexnum = s:/*存放顶点数在adjg.vexnum中*/adjg. arcnum = d:/*存放边点数在adjg,arcnum 中*/printf("\n\n"):for(i=O;i<adjg.vexnum;i++)(printf("输入顶点%d的值:",i+1):scanf("%d",&adjg.adjlist[i].vertex) ;/*输入顶点的值*/fflush(stdin);adjg. adjlist[il. link = NULL:]printf("\n\n"):for(i =O; i<adjg.arcnum; i++)(printf("输入第%d条边的起始顶点和终止顶点(用逗号隔开):",i+1):scanf("%d,%d",&s,&d):/*输入边的起始顶点和终止顶点*fflush(stdin);

while(s adjg. vexnum Il d adjg. vexnum)【printf("输入错,重新输入:");1scanf("%d,%d",&s,&d);s :d --:p = malloc(sizeof(EDGENODE)):/*建立一个和边相关的结点*p->adjvex = d;/*挂到对应的单链表上*/p->next = adjg.adjlist[s].link;adjg.adjlist[s].link = p;p =malloc(sizeof(EDGENODE));/*建立另一个和边相关的结点*/p->adjvex = s;p->next = adjg.adjlist[d]. link;/*挂到对应的单链表上*/adjg. adjlist[d]. link = p;]return adjg;1main()t1五、实训中出现的问题与解决方法