存储结构为邻接矩阵,怎么编写无向图添加、删除一个顶点,添加、删除一条边的算法?

存储结构为邻接矩阵,怎么编写无向图添加、删除一个顶点,添加、删除一条边的算法?,第1张

邻接表,存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。

对于无向图来说,使用邻接表进行存储也会出现数据冗余,表头结点A所指链表中存在一个指向C的表结点的同时,表头结点C所指链表也会存在一个指向A的表结点。

/* MGraph.cc: 图的邻接矩阵存储表示和实现 */

/* 包含图类型Graph定义;创建图;深度优先遍历;广度优先遍历 */

/* 用到引用型参数,在TC下无法通过编译,VC等C++编译器可通过 */

#include <stdio.h>

#include <string.h>

#include <limits.h> //含INT_MAX

#define VType     char    //顶点值类型

#define EType     int     //边权值类型

#define MAXVNUM   50      //最大顶点个数

#define DIGRAPH   0       //有向图(网)

#define UNDIGRAPH 1       //无向图(网)

#define INVALID   INT_MAX //无效权值(最大整数表示无穷大)

#define EMPTY     -1      //"空"顶点序号

删边i-j

邻接矩阵:

有向图:map[i][j] = 0

无向图:map[i][j] = map[j][i] = 0

邻接表:

有向图:

p = v[i] ->firstedge;

pre = p

while (p &&p ->data != j)

{pre = pp = p ->next}

if (p &&pre == p) v[i] ->firstedge = p ->next

else if (p) pre ->next = p ->next

无向图:

p = v[i] ->firstedge;

pre = p

while (p &&p ->data != j)

{pre = pp = p ->next}

if (p &&pre == p) v[i] ->firstedge = p ->next

else if (p) pre ->next = p ->next

p = v[j] ->firstedge;

pre = p

while (p &&p ->data != i)

{pre = pp = p ->next}

if (p &&pre == p) v[j] ->firstedge = p ->next

else if (p) pre ->next = p ->next


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11871624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存