news 2026/9/23 11:41:03

经典算法题详解之游乐园的迷宫(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
经典算法题详解之游乐园的迷宫(三)

解决方案

平面上有 个点,找到一条访问 个点的路径,使得路径的转角满足给定的转角序列。

题解

我们保持一个理想的状态:转向时,剩余的点都位于要求方向的一侧(即剩余点都符合当前这次的转向要求)。那么当前这次转向选择什么点,可以使下一次转向依旧满足这个理想的状态,从而可以不断的递归找下去。

若下一次转向的要求方向是 L (R),则这次转向的点中选择相对方向最右(最左)的点即可。

C++ 实现

class Solution { private: pair<int, int> Sub(pair<int, int> a, pair<int, int> b) { // 求点 a 到点 b 的向量 return make_pair(a.first - b.first, a.second - b.second); } int Cross(pair<int, int> a, pair<int, int> b) { // 求向量 a 到向量 b 的向量叉积 return a.first * b.second - a.second * b.first; } public: vector<int> visitOrder(vector< vector<int> >& points, string dir) { int n = points.size(); vector<bool> used(n, false); // 记录点的遍历情况, False未遍历 / True已遍历 vector< pair<int, int> > point; vector<int> order; // 记录返回结果 for (int i=0; i<n; ++i) { point.push_back( make_pair(points[i][0], points[i][1]) ); } // 查找最左的点作为 起始点 int start = 0; for (int i=1; i<n; ++i) { if (point[i] < point[start]) { start = i; } } used[start] = true; order.push_back(start); for (int i=0; i<dir.size(); ++i) { int next = -1; if (dir[i] == 'L') { // 转向方向为 L,选择相对方向最右的点 for (int j=0; j<n; ++j) { if (!used[j]) { if (next == -1 || Cross(Sub(point[next], point[start]), Sub(point[j], point[start])) < 0) { next = j; } } } } else if (dir[i] == 'R') { // 转向方向为 R,选择相对方向最左的点 for (int j=0; j<n; ++j) { if (!used[j]) { if (next == -1 || Cross(Sub(point[next], point[start]), Sub(point[j], point[start])) > 0) { next = j; } } } } // 返回结果加入选择的点,更新下一次转向的起点 used[next] = true; order.push_back(next); start = next; } // 添加最后一个剩余点 for (int i=0; i<n; ++i) { if (used[i] == false) { order.push_back(i); } } return order; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 21:15:23

EasyPoi 数据脱敏

结果规则Controller层 CrossOriginGetMapping("/exportStudentsDesensitization")public void exportStudentsDesensitization(HttpServletResponse response) throws IOException {List<Student> studentList studentService.list();List<StudentExportDe…

作者头像 李华
网站建设 2026/9/22 2:07:01

收藏必备!GPT-5.2震撼发布:OpenAI反击战,职场程序员的AI新神器

OpenAI发布GPT-5.2模型回应Google Gemini竞争&#xff0c;推出三版本。GPT-5.2 Thinking在44个职业任务中70.9%超越人类专家&#xff0c;编程能力创测试新高&#xff0c;长文本处理接近100%准确率&#xff0c;幻觉率降低30%。模型强调创造经济价值&#xff0c;为职场人士提供高…

作者头像 李华
网站建设 2026/9/22 21:41:39

3步上手Sparta:让网络安全渗透测试变得像玩游戏一样简单

你是否曾经觉得网络安全渗透测试太复杂&#xff0c;各种工具配置让人头疼&#xff1f;&#x1f914; 今天我要向你介绍Sparta——这款让网络基础设施扫描和枚举变得简单直观的Python GUI工具。无论你是安全新手还是经验丰富的渗透测试人员&#xff0c;Sparta都能帮你节省大量时…

作者头像 李华
网站建设 2026/9/21 16:17:17

Android媒体画廊应用终极指南:轻量级隐私保护的完美选择

Android媒体画廊应用终极指南&#xff1a;轻量级隐私保护的完美选择 【免费下载链接】Gallery Light-weight Media Gallery app for Android made with Jetpack Compose 项目地址: https://gitcode.com/gh_mirrors/galler/Gallery 在当今智能手机成为生活必需品的时代&a…

作者头像 李华
网站建设 2026/9/23 3:25:26

FT8371A,FT8371B,FT8371C 次边同步整流芯片典型应用资料分析

FT8371 是次边同步整流芯片&#xff0c;内置同步整流 MOS&#xff0c;适用于 DCM/QR 模式反激转换器&#xff0c;主打高效率、少外围、易集成&#xff0c;核心用于 5V 中小功率充电器与适配器&#xff0c;已形成 A/B/C 三款主力型号&#xff0c;FT8371A,FT8371B,FT8371C。FT837…

作者头像 李华
网站建设 2026/9/22 17:25:29

智慧文旅信创落地新标杆:四川省文旅厅完成MySQL 5.7平滑替换,筑牢省级管理平台自主可控底座

在国家全面推进数字政府与信息技术应用创新深度融合的背景下&#xff0c;对开源技术依赖的风险治理正成为关键领域安全体系建设的重要一环。2025年3月&#xff0c;四川省文化和旅游厅成功将其核心业务系统——“智游天府综合管理平台”的底层数据库&#xff0c;由原MySQL 5.7单…

作者头像 李华