大学实验4:利用数组表示法建立无向网
Posted lgqrlchinese
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大学实验4:利用数组表示法建立无向网相关的知识,希望对你有一定的参考价值。
实验目的:深入理解图的邻接矩阵存储结构
实验内容:
已知某无向网如图所示,要求利用数组表示法建立该网。
基本思想:编写两个功能函数,一个负责建立无向网的邻接矩阵存储结构,另一个负责对无向网的打印输出。
步骤1:引入必要的函数库
1 #include <stdio.h> 2 #include <stdlib.h>
步骤2:定义常量
/*定义最大的顶点个数*/
#define MAX_VERTEX_NUM 100
/*定义常量INFINITY,该常量表示两个顶点间没有边相关联*/
#define INFINITY 65535
F此时编译一下,看是否正确。
步骤3:对抽象的顶点类型和权值类型进行实例化
1 /* 实例化顶点类型:VertexType是用长度为3的字符串实现的,其中顶点名称占2个字符,结束符" "占1个字符 */ 2 typedef char VertexType[3]; 3 /*实例化权值类型:EdgeType是用整型实现的*/ 4 typedef int EdgeType;
F此时编译一下,看是否正确。
步骤4:定义结构体
1 typedef struct { 2 VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 3 EdgeType arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵 4 int vexnum, arcnum; //顶点数量和边的数量 5 } MGraph;
F此时编译一下,看是否正确。
步骤5:声明以下功能函数
1 /*建立无向网的邻接矩阵存储结构*/ 2 void CreateMGraph(MGraph *G); 3 /*输出无向网的邻接矩阵存储结构*/ 4 void DisplayGraph(MGraph G);
F此时编译一下,看是否正确。
步骤6:实现函数CreateMGraph()。
提示:先建立顶点向量G->vexs[],然后对邻接矩阵G->arcs[][]进行初始化,最后依次为每一条边赋权值。由于是无向网,因此边<Vi,Vj>对应于邻接矩阵中的两个元素,即G->arcs[i][j]和G->arcs[j][i]。
1 void CreateMGraph(MGraph *G) 2 { 3 /* i,j,k为控制变量,w用于保存用户输入的边的权值*/ 4 int i,j,k,w; 5 printf("输入顶点数和边数:"); 6 scanf("%d%d",&G->vexnum,&G->arcnum); 7 printf(" 输入所有的顶点:"); 8 /*输入所有的顶点*/ 9 for (i=0; i<G->vexnum; i++) 10 scanf("%s",&G->vexs[i]); 11 /*初始化邻接矩阵*/ 12 for(i=0; i<G->vexnum; i++) 13 for(j=0; j<G->vexnum; j++) 14 G->arcs[i][j]=INFINITY; 15 /*建立邻接矩阵*/ 16 for (k=0; k<G->arcnum; k++) 17 { 18 printf("输入边<Vi,Vj>的行下标i,列下标j和权值w:"); 19 scanf("%d%d%d",&i,&j,&w); 20 G->arcs[i][j]=w; 21 G->arcs[j][i]=G->arcs[i][j]; 22 printf(" "); 23 } 24 }
步骤7:实现函数DisplayGraph()。
1 void DisplayGraph(MGraph G) { 2 int i,j; 3 /*输出网中的顶点数,边数和所有的顶点*/ 4 printf("无向网含有%d个顶点和%d条边,顶点依次为:",G.vexnum,G.arcnum); 5 for(i=0; i<G.vexnum; i++) 6 printf("%s,",G.vexs[i]); 7 printf(" "); 8 printf("无向图的: "); 9 printf("序号i="); 10 /*输出列号*/ 11 for(i=0; i<G.vexnum; i++) 12 printf("%8d",i); 13 printf(" "); 14 /*输出邻接矩阵中的每一行*/ 15 for(i=0; i<G.vexnum; i++) { 16 /*输出行号*/ 17 printf("%8d",i); 18 for(j=0; j<G.vexnum; j++) 19 printf("%8d",G.arcs[i][j]); 20 /*换行,准备输出下一行*/ 21 printf(" "); 22 } 23 }
运行效果
参考文献
1.严蔚敏,吴伟民,《数据结构(C语言版)》,清华大学出版社,1997
2.陈锐,《零基础学数据结构》,机械工业出版社,2010
3.程杰,《大话数据结构》,清华大学出版社,2011
以上是关于大学实验4:利用数组表示法建立无向网的主要内容,如果未能解决你的问题,请参考以下文章