1图的基本概念
图由顶点和边组成
无向边(),有向边<>
邻接:无向边:相邻接
有向边:邻接到,邻接自
顶点的度,入度,出度
路径和路径长度:路径,一顶点到另一顶点的序列路径长度,边的个数
简单路径:除起点和终点可重复,其余不重复,回路
自回路和多重图:自回路,允许有边(u,u)或<u,u>;允许多条相同的边存在
完全图:n个顶点的无向图有最多的边数n(n-1)/2,无向完全图;n个顶点有最多的边数n(n-1),有向完全图
子图
连通图和连通分量:无向图任意两点连通,无向图中极大连通子图称为连通分量
强连通图和强连通分量
生成树:无向连通图的生成树是一个极小连通子图
有向树和生成森林:仅有一个顶点入度为0,其余均为1的有向图,生成森林由若干棵有向树组成包括所有的顶点
权和网:网的每条边都被赋予权
2图的存储及基本操作
2.1邻接矩阵法
用矩阵表示,不带权A[u][v]=1/0;带权A[u][v]=w(u,v)/0/无穷大
2.2邻接表表示法
边结点 为每个结点建立一个单链表
adjVex(与顶点相邻接的结点) | nextArc(指针域下一边结点) |
带权边结点
adjVex | w | nextAre |
3图的遍历
3.1深度优先搜索
访问到底,访问上一级,重复访问
邻接表O(n+e) 邻接矩阵O(n^2),n结点数,边数
3.2广度优先搜索
访问未访问的邻接点,再访问该级访问结点的邻接点
4图的基本应用
4.1拓扑排序
AOV网(顶点活动图)
顶点表示活动,有向边代表活动间的领先关系
拓扑排序:输出入度为0的点,删除该结点和其相邻接的边直到不存在结点,若输出顶点数小于图中顶点数,则存在有向回路,否则为该图的拓扑序列
4.2关键路径
AOE网 带权有向图,顶点表示事件,边表示活动,权表示活动持续时间,估算活动完成时间
源点就,汇点不可以存在回路
AOE网的关键路径
最早发生时间:时间到源点的最长路径长度
最晚发生时间:汇点最早发生时间减去该点到汇点的最长路径长度
活动最早开始时间:ak关联的边:<vi,vj>,为vi最早开始时间
活动最迟开始时间:vj最晚开始时间-w(vi,vj)
若活动最早开始时间=最迟开始时间,则为关键活动
由关键活动可确定关键路径(不止一条)
4.3 最小代价生成树
具有n个顶点的连通图的生成树是一个极小连通子图,包括图中全部顶点及n-1条边
普利姆(prim)算法
选定从顶点V0或者从其他顶点开始,加入相邻的权值最小的边
克鲁斯卡尔(Kruskal)算法
初始包含所有顶点,没有边,选择代价最小的边并使加入后不包含回路,直到包含n-1条边
4.4最短路径
迪杰斯特拉(Dijkstra)算法:求单源最短路径
列表格,记录终点集,将比较小的代替记录,最小的进行加入终点集,以后不做处理依次更新表格
总执行时间O(n^3)
弗洛伊德(Floyd)算法:所有顶点之间最短路径
两个数组:第一个,经过顶点0,1,2,...,k的顶点形成的最短路径
第二个,顶点j前驱顶点的序号,数值为i/-1