信息学竞赛辅导2-2非性结构之树图.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文档。上传文档
查看更多
信息学竞赛辅导2-2非性结构之树图

* * * * 1、深度优先搜索DFS 深度优先搜索类似于树的前序遍历,是树的前序遍历的推广。其搜索过程如下: 假设初始时所有结点未曾被访问。深度优先搜索从某个结点V0出发,访问此结点。然后依次从V0的未被访问的邻接点出发深度优先遍历图,直至图中所有和V0有路径相连的结点都被访问到。若此时图中尚有结点未被访问,则另选一个未曾访问的结点作起始点,重复上述过程,直至图中所有结点都被访问为止。换句话说,深度优先搜索遍历图的过程是以V0为起始点,由左而右,依次访问由V0出发的每条路径。 调用一次dfs(i),可按深度优先搜索的顺序访问处理结点i所在的连通分支(或强连通分支),dfs(i)的时间复杂度为W(n2)。整个图按深度优先搜索顺序遍历的过程如下: 2、广度优先搜索(宽度优先搜索)BFS 广度优先搜索类似于树的按层次遍历的过程,其搜索过程如下: 假设从图中某结点v0出发,在访问了v0之后依次访问v0的各个未曾访问的邻接点,然后分别从这些邻接点出发按广度优先搜索的顺序遍历图,直至图中所有可被访问的结点都被访问到。若此时图中尚有结点未被访问,则任选其中的一个作起始点,重复上述过程,直至图中所有结点都被访问到为止。换句话说,按广度优先顺序搜索遍历图的过程是以v0为起始点,由近及远,依次访问和v0有路径相连且路径长度为1,2,3……的结点。 bfs(i)的时间复杂度为W(n2)。调用一次bfs(i)可按广度优先搜索的顺序访问处理结点i所在的连通分支(或强连通分支)。整个图按广度优先搜索顺序遍历的过程如下: 1、写出图的深度优先搜索(DFS)算法和广度优先搜索(BFS)算法。 program dfsbfs(input,output); const n=8; var a:array[1..n,1..n]of integer;{图的邻接矩阵} visited,come:array[1..n]of integer;{访问标志} queue:array[1..n]of integer;{队列} t:array[1..n]of char;{结点信息} i,head,tail:integer; procedure init; var i,j,e,k:integer; begin for i:=1 to n do read(t[i]);{顶点信息} fillchar(a,sizeof(a),0); read(e);{边数} for k:=1 to e do{读入边的点信息,建立邻接矩阵} begin read(i,j); a[i,j]:=1; a[j,i]:=1; end; end; procedure dfs(i:integer); var j:integer; begin write(t[i]);{输出结点信息} visited[i]:=1;{访问标志} for j:=1 to n do{深度优先搜索i的邻接点} if (a[i,j]=1) and (visited[j]=0) then dfs(j); end; 四、图的应用 1、拓扑排序 [士兵排队]   有n个士兵(100),编号依次为1,2,3 。。。。n,排队训练,现在指挥官要把这些士兵从高到矮依次排成行,但现在指挥官不能直接获得每个人的身高信息,只能获得”i比j高“这样的比较结果输入:第一行为一个整数n,表示士兵的个数,以下若干行,每行两个数 i,j:表示i比j高。 输出:一种合法的排队序列 样例: 输入: 4 1 2 2 3 4 3 输出: 1 2 4 3 建立有向图,如果i比j高,建立一条由i指向j的有向边.J的入度加1.先找一个入度为0的结点,即没有比他高的结点输出,去掉该结点,同时把比他矮的结点的入度减1.再找入度为0的结点,依次类推.直到最后输出完毕. 1 2 3 4 拓扑排序算法 寻找入度为0的节点 将找到的节点放入队列中,删除所有这个节点引出的边 重复1,直至没有度为0的节点 如果有节点不在队列中,则说明原图中有环,否则无环。 1 2 5 3 6 4 7 3、生成树问题 无向图的最小生成树(贪心思想) Prim算法,适用于点少的图 Kruskal算法,适用于边少的图 有向图的最小生成树 Prim算法 将1号节点置入集合S中。 找到所有连接S中的节点和非S中的节点的边中的权值最小的那一条,并标记这条边,同时将连接的非S中的节点加入S集合。 重复2步骤,直到所有节点都在S中了。 1 2 4 3 5 6 1 2 3 1 2

文档评论(0)

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

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

1亿VIP精品文档

相关文档