算法设计与分析第五章1图的搜索算法详解.ppt
文本预览下载声明
第五章 图的搜索算法 ; 图是一种限止最少的数据结构,因此更接近现实,实际问题中很多数据关系都可以抽象成图,相关问题则可利用图的基本算法进行求解,很早就有专门研究图的是一门数学学科“图论”;其中的计算问题包括图的搜索、路径问题、连通性问题、可平面性检验、着色问题、网络优化等。图论中的著名算法有:求最小生成树的Kruskal算法、求最短路径的Dijkstra算法和Floyd算法、求二部图最大匹配(指派问题)的匈牙利算法、求一般图最大匹配的Edmonds“花”算法、求网络最大流和最小割的算法等。其中的一些算法在数据结构课程中已经学习过了。 ;1.显式图与隐式图 ;2.显式图的常用术语 ;带权图:j即图5 -2给图 5-1中各图的边上附加一个代表性数据 (比如表示长度、流量或其他 ),则称其为带权图 。
环 (cycle):图5-1中 ⑶图中的 v 1点本身也有边相连,这种边称为环。
有限图:顶点与边数均为有限的图,如图 5-1中的三个图均属于有限图。
简单图:没有环且每两个顶点间最多只有一条边相连的图,如图 5-1中的 ⑴图。
邻接与关联:当( v 1, v 2) ∈E,或 v 1, v 2 ∈E,即 v 1, v 2间有边相连时,则称 v 1和 v 2是相邻的,它们互为邻接点( adjacent),同时称( v 1, v 2)或 v 1, v 2 是与顶点 v 1、 v 2相关联的边。 ;顶点的度数 (degree):从该顶点引出的边的条数,即与该顶点相关联的边的数目,简称度。
入度( indegree):有向图中把以顶点 v为终点的边的条数称为是顶点 v的入度。
出度( outdegree):有向图中把以顶点 v为起点的边的条数称为是顶点 v的出度。
终端顶点:有向图中把出度为 0的顶点称为终端顶点,如图 5-1中 ⑵图的 v 3。 ;;3.隐式图术语 1)子集树 ;图5-3 n=3的子集树 ;
当要求解的问题需要在n 元素的排列中搜索问题的解时,解空间树被称作排列树(permutation tree)。
搜索空间为:
(1,2,3,……,n-1,n), (2,1,3,……,n-1,n), (2,3,1,……,n-1,n),(2,3,4,1,……,n-1,n),(n,n-1,……,3,2,1)
第一个元素有n 种选择,第二个元素有n-1种选择,第三个元素有n-2种选择,……,第n个元素有1???选择,共计n!个状态。若表示为树形就是一个n度树,这样的树有n! 个叶结点,所以每一个遍历树中所有节点的算法都必须耗时O(n! ) ;;4.图的存储 1)邻接矩阵法 ;;2)邻接表 ;图7.1 ; 5.1.2 图搜索及其术语;2.相关概念和术语 ;活结点:如果已生成一个结点而它的所有儿子结点还没有全部生成,则这个结点叫做活结点。
E-结点:当前正在生成其儿子结点的活结点叫E-结点(正
扩展的结点)。
死结点 :不再进一步扩展或者其儿子结点已全部生成的生成结点就是死结点 。;5.2.1 算法框架 ;2.算法框架 ;1)邻接表表示图的广度优先搜索算法 ;2)邻接矩阵表示的图的广度优先搜索算法;5.2.2 广度优先搜索的应用 ;【例1】已知若干个城市的地图,求从一个城市到另一个城市的路径,要求路径中经过的城市最少。 算法设计: ; 如图5-6表示的是从城市A到城市H的交通图。从图中可以看出,从城市A到城市H要经过若干个城市。现要找出一条经过城市最少一条路线。 ;具体过程如下: ;数据结构设计: ;算法如下:;算法分析:时间复杂度是O(n);空间复杂性为(n2),包括图本身的存储空间和搜索时辅助空间“队”的存储空间。;【例2】走迷宫问题 ;算法设计: ;数据结构设计: ;int jz[8][8]= {{1,0,0,0,1,0,1,1},{0,1,1,1,1,0,1,1}, {0,1,1,0,0,1,1,1}, {0,1,0,1,1,1,0,1}, {1,1,0,1,1,1,0,0},{0,0,1,1,1,1,1,0}, {1,1,1,0,0,1,1,0}, {1,1,1,1,0,0,0,1}};struct {int city, pre;} sq[100];int qh,qe,i,visited[100];main( )
{int i,n=8;
for(i=1;i=n,i=i+1) visited[i]=0;
search( );
}
;search( ){qh=0; qe=1;maze[1][1]=-1;
Sq[1].pre=0;sq[1].x=1;sq[1].y=1;
while( qhqe) /当队不空/ {qh=
显示全部