算法设计以及分析第五章1 图的搜索算法.ppt

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

第五章 图的搜索算法 ;上一页· 下一页· 返回首页;1.显式图与隐式图 ;2.显式图的常用术语 ;图 ;顶点的度数 (degree):从该顶点引出的边的条数,即与该顶点相关联的边的数目,简称度。 入度( indegree):有向图中把以顶点 v为终点的边的条数称为是顶点 v的入度。 出度( outdegree):有向图中把以顶点 v为起点的边的条数称为是顶点 v的出度。 终端顶点:有向图中把出度为 0的顶点称为终端顶点,如图 5-1中 ⑵图的 v 3。 路径与路长:在图 G=( V, E)中,如果存在由不同的边 (v i0, v i1 ), (v i1, v i2 ), …, (v in-1, v in )或是 v i0, v i1 , vi 1, v i 2, …, v in-1, v in )组成的序列,则称顶点 v i0, v in是连通的,顶点序列( v i0, v i1, v i2, …, v in)是从顶点 v i0到顶点 v in的一条道路。路长是道路上边的数目, v i0到 v in的这条道路上的路长为 n。 连通图:对于图中任意两个顶点 v i、 v j ∈V, v i、 v j之间有道路相连,则称该图为连通图。如 5-1中的 ⑴图。 网络:带权的连通图,如图 5-2所示。;3.隐式图术语 1)子集树 ;图5-3 n=3的子集树 ;;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;sq[1].city=1; sq[1].pre=0;    visited[1]=1; while( qhqe) /当队不空/  {qh=qh+1; /结点出队/  for(i=1;i=n,i=i+1) /扩展结点/   if (jz[sq[qh].city][i]=1 and visited[i]=0)    { qe=qe+1; /结点入队/      sq[qe].city=i;  sq[qe].pre=qh;      visited[qe]=1;      if (sq[qe].city=8) out( ); } } print(“No avaliable way.”); };out( ); /输出路径/   {print(sq[qe].city);     while(sq[qe].pre0)      { qe=sq[qe].pre;       print(--,sq[qe].city);}    } 算法分析: 算法的时间复杂度并不复杂是O(n),算法的空间复杂性为O(n2)

文档评论(0)

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

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

1亿VIP精品文档

相关文档