当前位置:
文档之家› ACM培训资料数据结构与算法
ACM培训资料数据结构与算法
struct ArcNode * next; /*指向下一个邻接点的指
针域*/
} ArcNode ;
表头结点类型 :
typedef struct Vnode
{ VertexType vertex;
/*顶点域*/
ArcNode * firstedge;
例a
b
1a 2b
4^ 1^
c
d
G1
3c 4d1^ 3^ Nhomakorabea0
15
0
16
2)数据类型描述
#define MaxVerNum 100
/*最大顶点数为100*/
邻接表类型 :
typedef struct ArcNode
{ int adjvex;
/*邻接点域*/
InfoType *Info; /*表示边上信息的域info*/
根据顶点v1,v2 查找顶点向量,确定其存储位置i,j
令:G.arcs[i][j].adj=w ,若有相关信息,输入弧的相 关信息到Info;令G.arcs[j][i].adj=w
N 已读入 arcnum条边了吗? Y
0 结束
13
7.2.2 邻接表 (Adjacency
1) 存储特点
List)
– 对于图G中的每个顶点vi,把所有邻接于vi的顶点vj链成 一个单链表,这个单链表称为顶点vi的邻接表;
数据结构
(DATA STRUCTURE)
计算机科学与工程系
第七章 图
• 图的基本概念 • 图的存储表示 • 图的遍历与连通性 • 最小生成树 • 最短路径 • 活动网络
0
2
7.1 图的基本概念
• 图的定义 图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:
Graph=( V, E )
InfoType *Info; // 存弧相关信息
}ArcCell,AdjMatrix[MaxVNum][MaxVNum]
图类型:
typedef struct
{ VertexType vexs[MaxVNum]; /*顶点表*/
AdjMatrix arcs;
/*邻接矩阵,即边表*/
int vexnum,arcnum;
其余顶点不重复出现的回路叫简单回路
0
7
例 245
1
3
G1
路径:1,2,3,5,6,3 路径长度:5 简单路径:1,2,3,5 6 回路:1,2,3,5,6,3,1 简单回路:3,5,6,3
例 1
57
32 4 6 G2
路径:1,2,5,7,6,5,2,3 路径长度:7 简单路径:1,2,5,7,6 回路:1,2,5,7,6,5,2,1 简单回路:1,2,3,1
0
6
• 路径长度
– 非带权图的路径长度是指此路径上边的条数。 – 带权图的路径长度是指路径上各边的权之和。
• 简单路径 若路径上各顶点 v1,v2,...,vm 均
不互相重复, 则称这样的路径为简单路径。
• 回路 若路径上第一个顶点 v1 与最后一个顶 点vm 重合, 则称这样的路径为回路或环。
• 简单回路 除了第一个顶点和最后一个顶点外,
/*图的顶点数和边
数*/
}Mgragh; /*Marag0h是以邻接矩阵存储的图*/ 12
4)图的创建
创建以邻接矩阵存储的无向网
▪ 思路:
输入图中边的数目arcnum,顶点数目vexnum
依次读入vexnum个顶点信息,存入顶点向量
初始化邻接矩阵arcs,将所有边上的权值置为∞
读入边 (v1,v2)和权值w
维数组 A[n][n],定义:
1, 如果< Vi, Vj > E 或者 (Vi, Vj) E A [i][ j] 0, 否则
0
9
0
10
网络的邻接矩阵
W (i, j) 如 i ! j 且 < Vi,Vj E 或(Vi,Vj) E
A
[i][
j]
=
否则, 但是 i != j
0 对角线 i == j
• 有向图与无向图 • 完全图
0
4
• 邻接顶点 如果 (u, v) 是 E(G) 中的一 条边,则称 u 与 v 互为邻接顶点。
• 子图 设有两个图G=(V, E)和G’=(V’, E’), 若 V ’ V 且 E’ E, 则称 图G’
是图G 的子图。
0
5
• 顶点的度 一个顶点v 的度是与它相关联的边的 条数,记作TD(v)。
• 顶点 v 的入度 是以 v 为终点(弧头)的有向边
的条数, 记作 ID(v); 顶点 v 的出度是以 v 为 始点(弧尾)的有向边的条数, 记作 OD(v)。
• 路径 在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1, vp2, …, vpm,到达 顶点vj。则称顶点序列 ( vi vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应是属于E 的边。
0
11
3)数据类型描述
#define MaxVNum 100 /*最大顶点数设为100*/
typedef XXX VertexType;
/*顶点类型*/
邻接矩阵类型:
typedef int EdgeType;
/*边的权值
设为整型*/
typedef struct ArcCell{
VertexType adj;
– 将所有点的邻接表表头放到数组中,就构成了图的邻接表
0
14
• 特点
– 无向图中顶点Vi的度为第i个单链表中的结点数
– 有向图中
• 顶点Vi的出度为第i个单链表中的结点个数 • 顶点Vi的入度为整个单链表中邻接点域值是i的结点个数
– 逆邻接表:有向图中对每个结点建立以Vi为头的弧的
单链表
vexdata firstarc adjvex next
0
8
7.2 图的存储结构
7.2.1 邻接矩阵(Adjacency Matrix)表示 法1)存储特点
– 在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表; – 还有一个表示各个顶点之间关系的邻接矩阵。 2)邻接矩阵 – 设图 A = (V, E)是一个有 n 个顶点的图,则图的邻接矩阵是一个二
其中 V = { x | x 某个数据对象}
是顶点的有穷非空集合;
E = {(x, y) | x, y V }
或
E = {<x, y> | x, y V && Path (x, y)}
是顶点之间关系的有穷集合,也叫做边(edge)集合。Path (x, y)表示从 x 到 y 的一条通路。
0
3