摘要: 首先,一个图包含的元素主要有: 顶点数目,顶点值,弧的数目,弧的值(一般由两个顶点来确定),当然你也可以加入这个图的信息,比如,是有向图,还是无向图。一般的,可以如下定义:typedef int VRType;typedef char InfoType;typedef char VertexType[MAX_NAME];#define INFINITY INT_MAX /* 用整型最大值代替∞ */#define MAX_VERTEX_NUM 20 /* 最大顶点个数 */typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ t 阅读全文
posted @ 2013-04-12 16:30 kamendula 阅读(749) 评论(0) 推荐(0)
摘要: 图的元素有这么几点:顶点数目,顶点信息,弧的数目,弧的信息,以及图的信息。在矩阵表示的时候,弧是较为容易确定的------两个顶点之间,也就是一个二维指针指向的是0还是不是0,或者是无穷大还是有值,通过这些来判断弧的存在。但是在邻接表中,就要用链表的特征:采用指针将图表示出来。 在邻接表中,要对途中的每一个顶点建立一个单链表。在严版的《数据结构》中,对于每个结点是这么定义的: 里面包含三部分的信息: 包括与顶点邻接的点在图中的位置,下一条弧的结点,以及包括弧的信息,包括弧的权值等信息。 于是她定义了这样的一个数据结构:<span style="font-family:SimHe 阅读全文
posted @ 2013-04-12 16:28 kamendula 阅读(565) 评论(0) 推荐(0)
摘要: 图的遍历主要分为两种形式:广度优先遍历(BFS) 和深度优先遍历(DFS)。对于图的遍历来说,不管是采用的邻接矩阵的方式,还是采用的邻接表的形式,其实现都是类似的,甚至可以说是一样的。广度遍历广度遍历利用了队列的特点,结点顺序的放入队列中,然后再出来。对于采用邻接表还是邻接矩阵,两者实际上是非常类似的:void BFSTraverse(MGraph G,Status(*Visit)(VertexType)){ /* 初始条件: 图G存在,Visit是顶点的应用函数。*/ /* 操作结果: 从第1个顶点起,按广度优先非递归遍历图G,并对每个顶点调用函数 */ /* Vis... 阅读全文
posted @ 2013-04-12 16:23 kamendula 阅读(428) 评论(0) 推荐(0)