- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
继续思考 首先不考虑顺序问题,则原题转化为: 给定N个单词,将N个单词首尾连接,问是否可行,如果可行,输出可行方案 继续思考 关键点:对于每个单词而言,有意义的只是首尾字母,其他信息无用 继续思考:而字母的选择只有26种,如果以字母作为节点,则单词即为首字母连接到尾字母的一条边 问题转化为:对于一个含26个节点的有向图,是否存在一条路径,使其经过每条边恰好一次 Congratulations! 欧拉路问题 继续思考 考虑顺序问题: 原问题转化为 如果存在欧拉路 or 欧拉回路 构造字典序最小的欧拉路 or 欧拉回路 不存在 输出 “***” 如何构造欧拉路? DFS 经典的圈套圈算法: void Euler (int start) { int i; for(i=1;i=E;i++) { if( ! visit[i] edge[i].from = = start) { visit[i] = 1; Euler ( edge[i].to ); path[ ++top ] = i; } } } 字典序最小? 观察上述算法容易发现,只要欧拉路存在,就一定可以按上述方法构造出欧拉路,则我们只需将所有边从小到大排序,运行上述算法得到的结果就一定是字典序最小的。 因为我们每次寻找新边加入欧拉路时,都优先考虑字典序更小的边 例题二:Sightseeing Tour /toj/showp1505.html 题目描述:混合图的欧拉路问题 题目中给定一个图G,图中既包含有向边也包含无向边,求一条路径经过每条边恰好一次,即求一条欧拉路 or 欧拉回路 解题思路 有向图的欧拉回路如何判定和构造我们已经知道,这道题显然可以将G转化成有向图,而不能转化成无向图(因为有向边不能转化成无向边,而无向边可以作有向边使用) 我们可以通过给无向边设定方向,然后通过不断调整来达到求解的目的 解题思路 首先,我们给图G中的所有无向边任意定向,定向后的无向边单独形成一个有向图H,定向后的混合图变成有向图G‘. 然后,计算图G‘中每个点i的入度与出度之差Deg[i].若图G’中存在某个点i的Deg[i]为奇数,则G中肯定没有偶拉回路;若G‘中所有点i的Deg[i]均等于0,则G’中存在偶拉回路. 解题思路 如果不是以上两种情况,则对于图G‘中的某一个Deg[i]0(出度大于入度)的点i,若图G’中存在Deg[j]0(入度大于出度)的点j, 且图H中存在一条i-->j的有向路径P,那么我们只要在图H中沿着路径P,将它上面的边都反向,P上的中间点入度和出度均不变,而起点i入度加1,出度减1,终点j入度减1,出度加1. 重复上述步骤,我们将或者找到一条欧拉回路,或者可以断定它不存在 三、欧拉回路 解决欧拉回路问题,首先要解决的两个问题是: 连通性的判断. 求顶点的度数. 在我们刚才谈及的两个问题中,难点并不在这两点上,但这并不意味这两点并不重要,例如:PKU2531.大家可以尝试自己做一下.这里仅给一些提示: 连通性的判断:链表 或者 并查集 求顶点度数:Hash表 或者 BST 例: 特殊的中国邮路 ? 给出加权无向图, 最多两个奇度点 ? 求经过每条边至少一次的最短回路 分析 ? 倍边法: 确定两个奇度点之间的某条路径,路径上的每条边经过两次(相当于把这些边复制了一份) ? 倍边后存在欧拉回路, 因此关键是倍边的开销应尽量小 ? 用dijkstra求出两奇点的最短路 图论基础 Name: 徐瑞涛 Grade: SCS 05 TOJ_ID: Gavin Email: xrtgavin@163.com 目录 广度优先搜索 深度优先搜索 欧拉路、欧拉回路 一、宽度优先搜索 BFS 应用 例1. 二分图判定 给出判断图是否为二分图的线性时间算法 等价于判断一个图是否存在奇圈 例2. 树的直径 一棵树T的直径定义为结点两两间距离的最大值. 给出求树直径的线性时间算法 例3. 幼儿园小朋友分组 幼儿园里有n个小孩。不幸的是小孩常常打架。每个小孩有不超过3个仇敌。是否有可能将所有小孩分成两组使得每个小孩最多和他的一个仇敌同组? 分析 这道题目可以看作是给所有的点黑白二染色。先给1染黑色,放入队列。每次从队列中
文档评论(0)