1 / 16
文档名称:

无向图的传递闭包..ppt

格式:ppt   大小:98KB   页数:16页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

无向图的传递闭包..ppt

上传人:q1188830 2018/6/6 文件大小:98 KB

下载得到文件列表

无向图的传递闭包..ppt

文档介绍

文档介绍:无向图的传递闭包
无向图的传递闭包主要用于判断图的连通性和图中满足条件的连通分支,具有很高的实用价值。
借鉴无向图的传递闭包思想,可以计算图中每一对顶点之间的最短路径(实际上就是Floyd算法的思想)。
无向图的传递闭包
问题一、判断无向图中任意两个顶点之间是否有路。
例1、输入一张无向图,指出该图中哪些顶点对之间有路。
输入:n(顶点数,1<=n<=20);
e(边数,1<=e<=210);
以下e行,每行为有边连接的一对顶点。
输出:k行,每行两个数,为存在路的顶点对序号i,j,要求i<j。
分析:
1、采用宽度优先或深度优先遍历来解决。因为从任意一个顶点出发,进行一次遍历,就可以求出此顶点和其它各个顶点的连通状况。所以只要把每个顶点作为出发点都进行一次遍历,就能知道任意两个顶点之间是否有路存在。一次遍历的时间复杂度为O(n),要穷举每个顶点,所以总的时间复杂度为O(n*n)。
无向图的传递闭包
2、设link,longlink:array[1..20,1..20] of Boolean;分别存放无向图和它的传递闭包。若longlink[i,j]=true,表示顶点对i,j之间有路;否则无路。
我们采用递推(迭代)的方法,不断对longlink进行运算(产生longlink(0), longlink(1),……, longlink(n))。对于i,j和k=1,……,n,如果图中顶点i至顶点j间存在通路且通路上所有顶点的序号均属于{1,2,……,k},则定义longlinkij(k)=true;否则值为false。有:longlinkij(k)= longlinkij(k-1) or (longlinkik(k-1) and longlinkkj(k-1))。
计算过程如下:
longlink的初值赋为link;
for k:=1 to n do
for i:=1 to n do
for j:=1 to n do
longlink[i,j]= longlink[i,j] or (longlink[i,k] and longlink[k,j]);
  由于布尔型的存储量少于整数,且位逻辑运算的执行速度快于算术运算,所以空间和时间效率都很好。时间复杂度为O(n*n*n)。了解Floyd算法求最短路径问题的学生,一眼就应该看出这个程序段和算法思想与Floyd算法是完全一致。
无向图的传递闭包
问题二、寻找满足条件的连通分支。
例2、输入一张顶点带权的无向图,分别计算含顶点数最多的一个连通
分支和顶点的权之和最大的一个连通分支。
输入:n(顶点数,1<=n<=20);
以下n行,依次表示顶点1 ~ 顶点n上的权;
e(边数,1<=e<=210);
以下e行,每行为有边连接的一对顶点。
输出:两行,一行为含顶点数最多的一个连通分支,
一行为顶点的权之和最大的一个连通分支,
输出时按顶点编号从小到大输出。
无向图的传递闭包
[问题分析]
我们可以先通过例1的longlink,计算出每个顶点所在的连通分支,然后在所有可能的连通分支中找出满足条件的解即可。至于计算连通分支的顶点方案,只要分别从连通分支中任选一个代表顶点,由此出发,通过深度优先搜索即可得到顶点方案。设:
best,besti分别存放含顶点数最多的连通分支中的顶点数和代表顶点;
max,maxk分别存放顶点的权之和最大的连通分支的顶点权之和和代表顶点;
计算best,besti,max,maxk的过程如下:
1、读入无向图的信息;
2、计算传递闭包longlink;
无向图的传递闭包
[问题分析]
3、穷举每一个顶点
for I:=1 to n do
begin
k:=0;s:=0
for j:=1 to n do {计算顶点i所在连通分支中的顶点总数k和顶点的权之和s}
if longlink[i,j] then begin
inc(k);
inc(s,顶点j的权)
end;
if k>best then begin best:=k;besti:=I end;
{若k为目前最大,则记入best,i 作为代表顶点记入besti}
if s>max then begin max:=s;maxk:=I end;
{若s为目前最大,则记入max,i 作为代表顶点记入maxk}
if k=n then break; {若整个图是连通图,则退出}
end;
无向图的传递闭包
[问题分析]
4、dfs(besti); {从代表顶点besti出发,深度优先搜索含顶点数最多的连通分支}
5、dfs(maxk); {从代表顶点maxk出发,深度优先搜索顶点的权之和最大的连通分支}
显然,以上算法