数据结构 图
图定义存储结构邻接矩阵邻接表
图的遍历深度优先搜索广度优先搜索
图定义
图是一个二元组<V,E>。其中V是顶点的有穷非空集合,E是两个顶点之间关系的集合。
如果<v,w>属于E,则<v,w>表示从v到w的一条弧,v为弧尾,w为弧头,此时的图称为有向图;如果<v,w>属于E必有<w,v>属于E,则为无向图。完全图 ① 具有n(n-1)条弧的有向图为有向完全图。 ② 具有n(n-1)/2条边的无向图称为无向完全图。顶点的度/入度/出度 ① 以顶点v为弧头的弧的数目称作顶点v的入度; ② 以顶点v为弧尾的弧的数目称作顶点v的出度; ③ 与顶点v相关的边的条数称作顶点v的度;路径长度 路径上边或弧的数目简单路径 顶点没有重复出现的路径;
存储结构
邻接矩阵
表示方法 假设图中有n个结点,其值分别为d1,d2,d3… 用自然数将他们依次编号为1,2,3…定义一个二位数组矩阵存放图中各结点的邻接信息; 邻接矩阵的每一个元素定义如下: 特点 ① 无向图的邻接矩阵是对称的; ② 可以很方便求得各点的度。 邻接矩阵表示法类型定义:
#define max_size 30
typedef struct graph
{
ElemType data
[max_size
][max_size
];
int n
;
}graph
;
邻接表
表示方法 用一个顺序存储空间来存储各节点的信息; 对于图中每一个结点dn构造一个单链表。单链表的头指针为顺序空间中对应存储结点的指针域。邻接表类型定义
#define max_num 30
typedef struct edgenode
{
int adjvex
;
struct edgenode
*nextarc
;
}edgenode
;
typedef struct vextexnode
{
int adjvex
;
edgenode
*firstarc
;
}vextexnode
,AdjList
[max_num
];
图的遍历
从图的某一顶点出发访遍图中所有顶点,且使每一顶点仅被访问一次,这一过程称为图的遍历。
深度优先搜索
树的先根遍历的扩展
广度优先搜索
树的层次遍历的扩展