图论算法总结及图论建模.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

图论算法总结及图论建模;图的基本概念

;图的基本概念;图的基本概念;路径和圈;连通性;完全图和补图;生成树;图例;图的表示方法;邻接矩阵;每个结点的邻居形成一个链表;优点

快速遍历某点所有邻居

占用存储空间小,是O(边数)的,在稀疏图上的效率远胜邻接表

缺点:查找/删除边不是常数时间;一、宽度优先遍历(BFS)

二、深度优先遍历(DFS);给定图G和一个源点s,宽度优先遍历按照从近到远的顺序考虑各条边.算法求出从s到各点的距离

宽度优先的过程对结点着色.

白色:没有考虑过的点

黑色:已经完全考虑过的点

灰色:发现过,但没有处理过,是遍历边界

依次处理每个灰色结点u,对于邻接边(u,v),把v着成灰色并加入树中,在树中u是v的父亲(parent)或称前驱(predecessor).距离d[v]=d[u]+1

整棵树的根为s;题目大意:

给出N*M个格子,给出K个已经被淹没的格子,其他格子都是干的,求最大的湖的面积(一个格子的面积视为1),如果两个湿的格子四联通(上下左右),则视为这两个格子同属于一个湖

输入格式:

第一行N,M,K

接下来K个格子的坐标;新发现的结点先扩展

得到的可能不是一棵树而是森林,即深度优先森林(Depth-firstforest)

特别之处:引入时间戳(timest)

发现时间d[v]:变灰的时间

结束时间f[v]:变黑的时间

1=d[v]f[v]=2|V|;初始化:time为0,所有点为白色,dfs森林为空

对每个白色点u执行一次DFS-VISIT(u)

时间复杂度为O(n+m)

;括号结构性质

对于任意结点对(u,v),考虑区间[d[u],f[u]]和[d[v],f[v]],以下三个性质恰有一个成立:

完全分离

u的区间完全包含在v的区间内,则在dfs树上u是v的后代

v的区间完全包含在u的区间内,则在dfs树上v是u的后代;定理(嵌套区间定理):

在DFS森林中v是u的后代当且仅当d[u]d[v]f[v]f[u],即区间包含关系.由区间性质立即得到.;一条边(u,v)可以按如下规则分类

树边(TreeEdges,T):v通过边(u,v)发现

后向边(BackEdges,B):u是v的后代

前向边(ForwardEdges,F):v是u的后代

交叉边(CrossEdges,C):其他边,可以连接同一个DFS树中没有后代关系的两个结点,也可以连接不同DFS树中的结点

判断后代关系可以借助定理1;当(u,v)第一次被遍历,考虑v的颜色

白色,(u,v)为T边

灰色,(u,v)为B边(只有它的祖先是灰色)

黑色:(u,v)为F边或C边.此时需要进一步判断

d[u]d[v]:F边(v是u的后代,因此为F边)

d[u]d[v]:C边(v早就被发现了,为另一DFS树中)

时间复杂度:O(n+m)

定理:无向图只有T边和B边(易证);if(d[v]==-1)dfs(v);//树边,递归遍历

elseif(f[v]==-1)show(“B”);//后向边

elseif(d[v]d[u])show(“F”);//前向边

elseshow(“C”);//交叉边

d和f数组的初值均为-1,方便了判断;实现细节;DAG:有向无环图

拓扑顺序:

;对图G使用DFS算法,每次把一个结点变黑的同时加到链表首部

ANEXAMPLE

定理1:有向图是DAG当且仅当没有返祖边

如果有返祖边,有环(易证)

如果有环c,考虑其中第一个被发现的结点v,环中v的上一个结点为u,则沿环的路径v?u是白色路径,u是v的后代,因此(u,v)是返祖边

定理2:该算法正确的得到了一个拓扑顺序的逆序;一、有向图:SCC划分的Kosaraju算法(有兴趣的同学自己看吧)

二、有向图:SCC划分的Tarjan算法

三、无向图:割顶和桥的判定;有向图中,u可达v不一定意味着v可达u.

相互可达则属于同一个强连通分量

(StronglyConnectedComponent,SCC)

有向图和它的转置的强连通分量相同

所有SCC构成一个DAG;Tarjan算法是基于对图深度优先搜索的算法

每个强连通分量为搜索树中的一棵子树

搜索时,把当前搜索树中未处理的节点加入一个堆栈

回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。;定义:

DFN(u)为节点u搜索的次序编号(时间戳)

Low(u)为u或u的子树能够追溯到的最早的栈中节点的次序

文档评论(0)

dalianzi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档