学习图的邻接表、图的遍历、最小生成树
邻接表
有无向图的邻接表、有向图的邻接表和有向网的邻接表。
#define max_vertex_num 10
typedef enum{DG,DN,UDG,UDN}
Graphkind;
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
otherinfo info;
}ArcNode;
typedef struct vertexNode{
vertexData data;
ArcNode *firstarc;
}vertexNode
typedef struct{
vertexNode vertex[max_vertex_num];
int vexnum,arcnum;
Graphkind kind;
}Adjlist;
邻接表优点:不必存储不存在的边(弧)。
邻接表缺点:·结构较为复杂。·如建立逆邻接表,方便计算入度,但实际上,一条边需要分别在邻接表与逆邻接表中存储。
图的遍历
方法为:深度优先搜索DFS、广度优先搜索BFS.
深度优先搜索【先序】【递归】 非递归辅助数据结构为【栈】。
广度优先搜索【层序】【队列】
最小生成树
连通分支概念:无向图的极大连通子图。
有极小连通子图的概念。
一个极小连通子图:含有图中的全部顶点,但只有足以构成一棵树的n-1条边。(不能反推)
普里姆算法、克鲁斯卡尔算法。