图总结
思维导图
重要概念笔记
图的存储结构
邻接矩阵
1.顶点信息:记录各个顶点信息的顶点表
2.边或弧信息:各个顶点之间关系的邻接矩阵
#define MAXV
typedef struct
{
int no;
InfoType info;
}VertexType;
typedef struct
{
int edges[MAXV][MAXV];
int n,e;
VertexType vex[MAXV];
}MatGraph;
MatGraph g;
邻接表
typedef struct Vnode
{
Vertex data;
ArcNode *firstarc;
}VNode;
typedef struct ANode
{
int adjvex;
struct ANode *nextarc;
InfoType info;
}ArcNode;
typedef struct
{
VNode adjlist[MAXV];
int n,e;
}AdjGraph;
AdjGraph *G;
图的遍历
深度优先遍历的过程:
1.从图仲某个初始顶点v出发,首先访问初始顶点v
2.选择一个与顶点v相邻且没被访问过的顶点w为初始顶点,再从w出发进行深度优先搜索,直到 图中与当前顶点v邻接的所有顶点都被访问过为止
广度优先遍历的过程:
1.访问初始点v,接着访问v的所有未被访问过的邻接点
2.按照次序访问每一个顶点的所有未被访问过的邻接点
3.以此类推,直到图中所有顶点都被访问过为止
生成树和最小生成树
最小生成树
对于带权连通图G,n个顶点,n-1条边
根据深度遍历或广度遍历生成生成树,树不唯一
其中权值之和最小的生成树称为图的最小生成树
普里姆(Prim)算法
克鲁斯卡尔(Kruskal)算法
最短路径
Dijkstra算法
Floyd算法
拓扑排序
概念:
在一个有向无环图中找一个拓扑排序的过程称为拓扑排序
伪代码
while(栈不空)
{
出栈节点v
遍历v的所有邻接点
{
所有邻接点的入度-1
if(邻接点入度为0)
入栈st
}
}
AOE-网和关键路径
关键路径:
关键路径为源点到汇点的最长路径
最早开始时间和最迟时间
最早开始时间一定是所求点的前驱时间都已完成
最迟开始时间要保证后继时间能完成,取最小
疑难问题及解决方案
连通图和连通分量
(还没解决)对强连通分量不是很懂,不知道要怎么计算,例如: