图论
图论:
<绪论>
1 运用图论有很多处理社会上的事情。比如:交通网,电信网,供水网,互联网等。
2 图分为四种:
1 无向图
2 有向图
3 无向带权图
4 有向带权图
3 其中最主要的算法是遍历算法:包括广度算法,深度算法。
4 研究方向还是从逻辑结构,存储结构还有数据算法运算。
5 定义:顶点,边。
比如:v = {1,2,3,4,5} 一个编号对应一个唯一的顶点。
G={(1,2),(1,3),(2,3),(2,4).....} 连接两个不同顶点的边的有限集合。
即逻辑结构是多对多。
6 无向图:( i , j ) i到j 或是 j到j.
7 有向图:( i , j ) i到j 。
8 重中之重:每个元素有0个前驱或多个前驱,每个元素也可以0个后继或多个后继。
<二>基本术语:
1 无向图:顶点,边(我不多解释,你懂得)
2 有向图:顶点:对于<i, j>来说i是起点,j是终点。
边:< i , j>对于这个来说,从i出发的是一条出边,从j进入的是一条入边。
3 度数:一个顶点到所有边的数目。
4 出度与入度:对于有向图来说,出度就是从一个点指向另一个点的边数,而入度就是进入这个点的变得数目,所以在有向图里你懂得:出度加入度就是有向图的度。
5 度数/2就是这个图的边数。
6 完全图:
1 无向图:每两个顶点之间就存在一个边。(一个边)共n(n-1)/2条边。
2 有向图:每两个顶点之间存在两个边(出边与入边)。(两个边)共n(n-1)条边。
7 稠密图:当一个图完全接近于完全图时。
8 稀疏图:当一个图远小于完全图。
9 子图:你懂得。
10 路径与路径长度:
1 无向:顶点i到j的序列。比如(i1,i2),(i2,i3),(i3,i4),(i4,i5).......
2 简单路径:除开始点和结束点可以相同,其余点都不同的序列就是简单路径。
3 回路或环:开始点与结束点为同一顶点。
4 简单回路:开始点和结束点相同的简单路径。
11 连通:
无向图:顶点i与顶点j有路径,则二者是连通的。
连通图:任意两个顶点都连通,则为连通图,否则为非连通图。
连通分量:极大连通子图。
任何连通图都只有一个连通分量。
非连通图有多个连通分量。
有向图:顶点i到顶点j有路径。则为连通的。
强连通图:任意两个顶点i到j都连通,那么该图为连通图。
强连通分量:你懂得。
12 权:图中每一个边上都有一个数值,这个数值就是权
13 权有可能是一个顶点到另一个顶点的距离,也有可能是花费代价。
14 网:边上带权的图。
三<图的邻接矩阵存储结构,图的邻接表存储结构>
1 首先来看邻接矩阵存储结构:
1 二维矩阵:
比如: 0 1 1 无穷
1 0 1 0
无穷 1 0 1
1 无穷 0 0
其中1代表 有相邻的边
0 指向自身
无穷 指不到所指的那条边
其中无向图是对称矩阵:因为a到b,则b也到a.
有向图不可能是对称矩阵:因为a到b,但是b不一定到a.
无向图的度:第i行或第i列是为1的元素。
有向图的度:第i行与第i列的1的数目之和。(出度+入度)。
数据类型定义:自己看书。
2 邻接表:
邻接表分为两部分,一个是顶点,另一个是边。
表头节点包括两个部分,一个是头,另一个是指针,(头是信息吧,预估)。
边表节点,包括三个部分,一个是id,一个是权值,另一个是地址,指向下一个节点。
顺序与链式相结合:在表头的地方,可以使用顺序表,
在表的边节点上,可以使用链表。
<第三个重点>:图的遍历:(这里先都以邻接表为例)
1 遍历可以分为两种:广度遍历算法BFS(breadth first search)与深度遍历算法DFS(deep first search)。
2 遍历策略:
1 DFS:在树里我们就用过,比如先序算法。
2 BFS:在树里我们也用过,比如层次遍历算法。
3 DFS:
1 访问初始点:顶点。
2 选择与顶点相邻却没有被访问过的为下一个顶点。
3 直到所有的都被访问。
注:递归可以相当于回退。
重中之重:相邻的中,或许有的已经作为其他顶点的邻接点被访问了,但是由于遍历,另外一个顶点还是有可能碰到他,那么如何判断他到底被访问过还是没有?
答:可以用一个数组:这个数组里面存放的是从1开始的id编号值得状态值:其中编号为1的已经被访问过,编号为0的是还没有被访问。由此来判断。
4 BFS:
1 访问顶点
2 访问顶点的所有邻接点。
3 都访问完了,在去掉第一个点,在访问第二个邻接点的所有邻接点。
注:队列可做删除的用处。
5 非连通图的遍历:
说明:虽然是非连通图(即可能有两个连通分量或是更多,但是在邻接表里都会去表示,而表示出来的效果是前几个顶点的边节点所代表的id值与后面的节点的id值脱节)。
算法我就不写了,完了自己写。
6 生成树:
顾名思义:生成树就是由图变为树。图生成的树边是(n-1),即图的顶点比如是5,那么生成的树必须有4条边。
因此,会有两个特点。
<特点一>:如果再多一条边,那么构成环。
<特点二>:如果再少一条边,那么非连通。
7 最小生成树:即生成的树带权:这样就有大小之别,比如路程最短,又比如费用最少。
定义:图的所有生成树中,把权值相加所得之和的最小值所指向的树为最小生成树。
8 最小生成树的prime算法。
点睛之笔:需要两个数组:lowcost[] closest[]
9 最小生成树的kruskal算法。

浙公网安备 33010602011771号