前言
之前学过了其它的数据结构,如:
集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。
线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个,如线性表、栈、队列,每一个节点和其它节点之间的关系 一个对一个 \color{orange}一个对一个 一个对一个。
树型结构 \color{#5ecffd}树型结构 树型结构 —— 一个对多个,如树。
现在要接触一下图这个结构了,图是多个对多个的结构,其没有初始结点,也没有最终结点。每一个节点都称为顶点。
图 \color{#5ecffd}图 图——因为图是若干个顶点,顶点之间相互连接,没有先后顺序,所以图没有顺序存储结构,但可以借助二维数组来表示元素间的关系( 邻接矩阵 \color{orange}邻接矩阵 邻接矩阵)。链式存储结构也可以描述图: 邻接表、邻接多重表、十字链表 \color{orange}邻接表、邻接多重表、十字链表 邻接表、邻接多重表、十字链表。
邻接矩阵
存储表示:用两个数组分别存储 顶点表 \color{orange}顶点表 顶点表和 邻接矩阵 \color{orange}邻接矩阵 邻接矩阵。
#define MAZINT 32767 //极大值
#define MVNUM 100 //最大顶点数
typedef char VerTexType; //设顶点的数据类型为字符型
typedef int ArcType; //假设边的权值类型为整型
typedef struct {
VerTexType vexs[MVNUM]; //顶点表
ArcType arcs[MVNUM][MVNUM]; //邻接矩阵
int vexnum,arcnum; //图的当前点数和边数
}AMGraph;
图的定义和术语
Graph = (Vertex,Edge)
G = (V,E)
V:Vertex 顶点,描述:顶点数据有有穷非空集合。
E:Edge 边,描述:边的有空集合。
🚲有向图:每条边都是有方向的

🚲无向图:每条边都是无方向的

🚲无向完全图:其中任意一点,都和其余所有点相连接(无方向)。
V1 和 V2、V3、V4 相互连接
V2 和 V1、V3、V4 相互连接
V3 和 V1、V2、V4 相互连接
V4 和 V1、V2、V3 相互连接
n 个顶点, n ( n − 1 ) / 2 条边 \color{orange}n个顶点,n(n-1)/2条边 n个顶点,n(n−1)/2条边
解释:(n-1):求单个顶点的最大边数
如果有A、B、C三个顶点
则A 的最大边数:A 和 B连,A 和 C 连。 = 2条(因为A无法和自己相连,所以单个顶点的最大边数 = 所有顶点数-自身 = n-1
解释:n(n-1):求所有顶点的最大边数之和
(n-1)为单个顶点的最大边数,乘以n 就为所有顶点的最大边数之和
解释:n(n-1)/2:边数
已经求出 n(n-1) 为所有顶点的最大边数之和,假设有三个顶点A、B、C。
A的最大边数为A 和 B连,A 和 C 连
B的最大边数为B 和 A连,B 和 C 连
可以看出来吗?第一次A和B连,第二次B和A连,其实重复了,边只有一个,但计算了两次。/2 的目的是为了消除所有单条边计算了两次的问题
🚲有向完全图:其中任意一点,都和其余所有点相连接(有方向)。
注意&#x