图的储存方式
来源:互联网 发布:java实验fan 编辑:程序博客网 时间:2024/05/17 22:21
图的储存方式
-----
邻接矩阵邻接表
图的ADT抽象数据结构
ADT Graph { Objects: a nonempty set of vertices and a set of edges, where each edge is a pair of vertices Functions: for all graphGraph, v, v1 and v2Vertices Graph Create(): return an empty graph Graph DeleteEdge(graph, v1, v2): return a graph in which the edge (v1, v2) is removed Boolean IsEmpty(graph): if (graph==empty graph) return TRUE; else return FALSE … … } ADT Graph
一.邻接矩阵
定义:
无权图
有权图
① 无向图的邻接矩阵一定是一个对称矩阵。因此,在具体存放邻接矩阵时只需存放上(或下)三角矩阵的元素即可。
② 对于无向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是第i 个顶点的度TD(vi)。
③ 对于有向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是第i 个顶点的出度OD(vi)(或入度ID(vi))。
④用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连;但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。
这是用邻接矩阵存储图的局限性。
下面介绍图的邻接矩阵存储表示。
在用邻接矩阵存储图时,除了用一个二维数组存储用于表示顶点间相邻关系的邻接矩阵外,还需用一个一维数组来存储顶点信息,另外还有图的顶点数和边数。故可将其形式描述如下:
② 对于无向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是第i 个顶点的度TD(vi)。
③ 对于有向图,邻接矩阵的第i 行(或第i 列)非零元素(或非∞元素)的个数正好是第i 个顶点的出度OD(vi)(或入度ID(vi))。
④用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连;但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。
这是用邻接矩阵存储图的局限性。
下面介绍图的邻接矩阵存储表示。
在用邻接矩阵存储图时,除了用一个二维数组存储用于表示顶点间相邻关系的邻接矩阵外,还需用一个一维数组来存储顶点信息,另外还有图的顶点数和边数。故可将其形式描述如下:
#define MaxVertexNum 100 /*最大顶点数设为100*/typedef char VertexType; /*顶点类型设为字符型*/typedef int EdgeType; /*边的权值设为整型*/typedef struct {VertexType vexs[MaxVertexNum]; /*顶点表*/EdeType edges[MaxVertexNum][MaxVertexNum]; /*邻接矩阵,即边表*/int n,e; /*顶点数和边数*/}Mgragh; /*Maragh 是以邻接矩阵存储的图类型*/建立一个图的邻接矩阵存储的算法如下:void CreateMGraph(MGraph *G){/*建立有向图G 的邻接矩阵存储*/int i,j,k,w;char ch;printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");scanf("%d,%d",&(G->n),&(G->e));/*输入顶点数和边数*/printf("请输入顶点信息(输入格式为:顶点号<CR>):\n");for (i=0;i<G->n;i++) scanf("\n%c",&(G->vexs[i])); /*输入顶点信息,建立顶点表*/for (i=0;i<G->n;i++)for (j=0;j<G->n;j++) G->edges[i][j]=0; /*初始化邻接矩阵*/printf("请输入每条边对应的两个顶点的序号(输入格式为:i,j):\n");for (k=0;k<G->e;k++){scanf("\n%d,%d",&i,&j); /*输入e 条边,建立邻接矩阵*/G->edges[i][j]=1; /*若加入G->edges[j][i]=1;,*//*则为无向图的邻接矩阵存储建立*/}}/*CreateMGraph*/
对于稠密图 邻接矩阵操作方式十分简便
但对于稀疏图 邻接矩阵会浪费大量的资源
0 0
- 图的储存方式
- 图的常见储存方式
- 图的储存方式之邻接矩阵
- 变量的储存方式
- Android的数据储存方式
- 浮点型的储存方式
- Android的数据储存方式
- 图的储存方式之邻接链表
- Android 数据储存的方式之本地数据库储存
- 图的储存
- 图的储存 模板
- 图的储存结构
- 图的储存
- opencv储存图像的两种方式
- Ehcache中储存缓存的方式
- Android下的数据储存方式
- 03Ehcache中储存缓存的方式
- Android中数据储存的方式
- uboot中flash调用
- JAVA ffmpeg 视频处理
- 多个git帐号的切换
- unity3d链接postgresql,读数据库内容并且显示(读出的中文在编辑器中乱码,发布standalone正常)
- html(四)_表格,列表,区块
- 图的储存方式
- 小程序开发补坑
- STL遍历算法 “for_each ”,“transform”
- 简单学正则表达式
- Spring中scope作用域(转)
- Android 6.0 PowerManagerService 一
- liux环境下修改mysql编码
- controller跳转另外一个controller
- makefile 详解