当前位置: 首页 > news >正文

欧拉回路与欧拉路径实例分析

我们先来看题目描述:

给你一个下标从 开始的二维整数数组 pairs,其中 pairs[i] = [starti, endi]。如果 pairs 的一个重新排列,满足对每一个下标 i(1 <= i < pairs.length)都有 endi-1 == starti,那么我们就认为这个重新排列是 pairs 的一个合法重新排列。 请你返回任意一个 pairs 的合法重新排列。 注意:数据保证至少存在一个 pairs 的合法重新排列。

  • 1 <= pairs.length <= 105
  • 0 <= starti, endi <= 109

读者可能会尝试把每个 pair 看作一个点,并在所有 end 和 start 相等的 pair 之间连一条有向边。然而,设 pair 的数量有 个,这样构建的图将有 条边(考虑 个 pair 满足 end == 1,另外 个 pair 满足 start == 1 的数据),无法满足本题的数据范围。并且,读者还需要在这样构建的图中找出一条经过所有点恰好一次的路径(即哈密顿路径^12),这是一个 NP 完全问题,同样无法满足本题的数据范围。

上述建图的方式没有较好地利用 endi-1 == starti 的性质。我们反过来将 start 和 end 看作点,将每个 pair 看作从 start 指向 end 的有向边。这样建图自然保证了连续走过的两条边满足 endi-1 == starti。更妙的是,我们只需要找到一条经过所有边恰好一次的路径,又回到了我们熟悉的有向图的欧拉路径问题。

由于题目保证有解(即保证存在欧拉路径),我们可以省去大量判断,直接使用 Hierholzer 算法即可。本题的 C++ 代码如下:

class Solution { public: vector<vector<int>> validArrangement(vector<vector<int>>& pairs) { // 构建有向图 unordered_map<int, vector<int>> e; unordered_map<int, int> inDeg, outDeg; for (auto &p : pairs) { e[p[0]].push_back(p[1]); outDeg[p[0]]++; inDeg[p[1]]++; } int s = -1; // 入度比出度少 1 的节点就是起点 for (auto &p : e) if (inDeg[p.first] + 1 == outDeg[p.first]) s = p.first; // 如果起点未指定,说明存在欧拉回路,选择任意一个非零度节点即可 if (s == -1) s = pairs[0][0]; vector<vector<int>> ans; function<void(int)> dfs = [&](int sn) { while (e[sn].size() > 0) { int fn = e[sn].back(); // 删除有向边 sn -> fn e[sn].pop_back(); // 继续遍历相邻点 dfs(fn); // 将有向边 sn -> fn 加入结果序列中 ans.push_back({sn, fn}); } }; dfs(s); // ans 保存的是欧拉路径的倒序,必须 reverse 才是正确答案 reverse(ans.begin(), ans.end()); return ans; } };
http://www.jsqmd.com/news/994957/

相关文章:

  • MPC8541E硬件规格书深度解析:选型、电源、时序与PCB设计实战指南
  • 深度解析Java字节码逆向工程:CFR反编译核心技术揭秘与实战指南
  • PHY6222蓝牙开发避坑指南:手机调试时如何看懂并操作那些“Unknown Service”
  • 2026漯河企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 2026徐州市鼓楼区家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!售后无忧,线上质保可查。本地防水补漏公司为您排忧解难! - 防水百科
  • AWS Athena 实战:S3 文件直查与 Schema-on-read 原理详解
  • 蓝桥杯网络安全赛备赛指南:从情报收集到漏洞利用的完整技能树梳理
  • 2026黄石企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 5分钟快速上手:用Sunshine搭建个人游戏串流平台的完整指南
  • 2026南阳企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 手把手教你用LT9211搞定MIPI转LVDS,搞定车载屏和广告机显示方案
  • 2026晋城企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 2026深圳市光明区家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!售后无忧,线上质保可查。本地防水补漏公司为您排忧解难! - 防水百科
  • 对话模型的“边界”测试:哪些问题它永远答不好?
  • 2026淄博本地土壤检测农田土壤检测哪家强?TOP 正规机构榜单 + 联系方式 - 鉴安检测
  • 2026上海GEO优化服务商实力测评报告:本土七强企业赋能制造业TOB数字化营销升级 - 速递信息
  • 2026克孜勒本地土壤检测农田土壤检测哪家强?TOP 正规机构榜单 + 联系方式 - 鉴安检测
  • 2026吕梁企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 【Java IO 笔记】从一段课堂代码看文件读取:为什么不能直接转 String?
  • [智能体-364]: Deep Agents,什么样的代码是在沙箱中执行?
  • 别只背公式!用gmpy2手把手还原RSA共模攻击,从BUUCTF Samemod理解扩展欧几里得
  • Athena+S3直接SQL查询实战:零运维高效分析指南
  • 2026辽源市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • AzerothCore学习笔记·数据库05:模板表设计——核心字段演化逻辑
  • [实战] 2026年供应链质量管理(SQM)数字化转型:从图纸识别到检验计划自动化
  • 2026肇庆电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 2026马鞍山企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 2026漳州企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 工业级遗传算法实战:多样性维持、约束处理与自适应收敛
  • 20260611 之所思 - 人生如梦