acm_图及搜索算法.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
acm_图及搜索算法.ppt

图及搜索算法 王 璐 中原工学院计算机学院 2010-4 图的基本概念 显式图 图的结构是显式给出的,包括顶点、边及权重 常用术语 环 简单图 顶点的度 终端顶点 路径与路长 连通图 网络 图的基本概念 隐式图 有一些求解、最优化或证明类问题,一般仅给出初始节点和想要达到的目标,解决过程是通过在某个可能的解空间内寻找所要的解或最优解。问题的解空间多是树形或图形结构,但并没有显式给出,称为隐式图。 例: 子集树:0-1背包问题,八皇后问题 排列树:旅行商问题 图的存储 显式图 邻接矩阵 邻接表 隐式图 隐式图是在一定规律下构造的,一般不需要专门的存储,而是搜索中根据隐式图的规律特点确定搜索过程。 宽度(广度)优先搜索 逐层搜索 首先访问出发点v,接着依次访问v的所有邻接点w1,w2,…,wt,然后再依次访问与w1,w2,…,wt邻接的所有未曾访问过的顶点。依此类推,直至图中所有和起点v有路径相通的顶点都已访问为止。此时从v开始的搜索过程结束。 若G是连通图,则一次就能搜索完所有节点;否则,在图G中另选一个尚未访问的顶点作为新源点继续上述的搜索过程,直至G中所有顶点均已被访问为止。 BFS的基本思路及步骤 主要用于解决在显式图中寻找某一方案的问题,解决问题的方法就是通过搜索图的过程中进行相应的操作,从而解决问题。 基本步骤 确定图的存储方式 设计图搜索过程中的操作,其中包括为输出问题解而进行的存储操作。 输出问题的结论 BFS的实现 活节点(待扩展节点)队列 初始时,活节点队列为空,根节点A是当前扩展节点。扩展出的儿子节点,按先后顺序依次加入活节点队列,并舍弃当前扩展节点A。 每一个活节点只有一次机会成为扩展节点。活节点一旦成为扩展节点,就一次性产生其所有儿子节点。在这些儿子中,导致不可行解或导致非最优解的儿子被舍弃,其余儿子被加入活节点队列中。此后,从队列中取对首节点成为当前扩展节点,并重复上述节点扩展过程。 该过程一直持续到找到所需的解或活节点队列为空时为止。 BFS实现中的注意事项 由于BFS一般需要在搜索结束(或 到达目标)后,即搜索完所有层所有节点(队列为空时结束),才能得出问题的解。这样,在搜索过程中,有一个重要操作就是记录当前找到的解决问题的方案。 在宽度优先扩展节点时,一个节点可能多次作为扩展对象,这是需要避免的。一般开辟数组visited记录图中节点被搜索的情况。 BFS队列的实现 线性表 队列操作 InitQueue() 队列初始化 EnQueue(Q,k) 入队 QueueEmpty(Q) 判断队列是否为空 DeQueue(Q) 出队 数组 进队操作:向后移动对尾下标qe 出队操作:向后移动对首下标qh 判空:qe==qh 布线问题 问题描述 印刷电路板将布线区域划分为n×m个方格阵列,如图所示。 精确的电路板布线问题要求确定连接方格a的中点到方格b的中点的最短布线方案。 布线时电路只能沿直线或直角布线。 为避免线路相交,已布线方格做上封闭标记,其他线路布线不允许穿过封闭区域。 为讨论方便,我们假定电路板外面的区域为已加封闭标记的方格。 布线问题 算法思想 解此问题的队列式分支限界法从起始位置a开始将它作为第一个扩展结点。与该扩展结点相邻并且可达的方格成为可行结点被加入到活结点队列中,并且将这些方格标记为1,即从起始方格a到这些方格的距离为1。 接着,算法从活结点队列中取出队首结点作为下一个扩展结点,并将与当前扩展结点相邻且未标记过的方格标记为2,并存入活结点队列。这个过程一直继续到算法搜索到目标方格b或活结点队列为空时为止。即加入剪枝的广度优先搜索。 布线问题BFS算法描述 Position offset[4]; offset[0].row = 0; offset[0].col = 1; // 右 offset[1].row = 1; offset[1].col = 0; // 下 offset[2].row = 0; offset[2].col = -1; // 左 offset[3].row = -1; offset[3].col = 0; // 上 for (int i = 0; i = m+1; i++) grid[0][i] = grid[n+1][i] = 1; // 顶部和底部 for (int i = 0; i = n+1; i++) grid[i][0] = grid[i][m+1] = 1; // 左翼和右翼 for (int i = 0; i NumOfNbrs; i++) { nbr.row = here.row + offset[i].row; nbr.col = here.col + offset[i]

文档评论(0)

dmz158 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档