如何实现蛇形遍历二维网格并生成坐标路径
发布时间 - 2025-12-25 00:00:00 点击率:次本文介绍如何编写一个函数,对嵌套列表表示的二维网格进行蛇形(之字形)遍历:偶数行从左到右、奇数行从右到左,返回每个访问位置的 (列索引, 行索引) 坐标元组列表。
在网格遍历类问题中,“蛇形路径”(zigzag or serpentine order)是一种常见模式:它要求遍历行为随行号奇偶性动态切换方向。关键在于——方向控制应作用于列索引序列,而非原始数据本身。原代码中的错误正在于此:它对 row(某一行的数据)调用了 reverse_list,但后续仍用 range(len(reverse_row)) 生成列索引,这实际上完全忽略了 reverse_row 的内容,导致奇数行仍按 (0,i), (1,i), ... 顺序添加坐标,与预期的反向遍历(如 (4,i), (3,i), ...)不符。
正确做法是:为每一行生成标准列索引列表 col_indices = list(range(len(row))),再根据行号奇偶性决定是否对其索引序列进行反转。这样既能保持坐标语义清晰((column, row)),又能精准控制移动顺序。
以下是修正后的完整实现:
def reverse_list(input_list):
return input_list[::-1]
def student_function(field):
plough_movements = []
for row_index, row in enumerate(field):
col_indices = list(range(len(row))) # 标准列索引 [0, 1, 2, ..., len(row)-1]
if row_index % 2 == 0:
# 偶数行(0, 2, 4...):正向遍历 → (0, r), (1, r), (2, r), ...
plough_movements.extend([(col, row_index) for col in col_indices])
else:
# 奇数行(1, 3, 5...):反向遍历 → (len-1, r), (len-2, r), ..., (0, r)
reversed_cols = reverse_list(col_indices)
plough_movements.extend([(col, row_index) for col in reversed_cols])
return plough_movements✅ 验证示例:
假设 field = [[0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4]](3 行 × 5 列),则输出为:
[(0,0),(1,0),(2,0),(3,0),(4,0), (4,1),(3,1),(2,1),(1,1),(0,1), (0,2),(1,2),(2,2),(3,2),(4,2)]
完全符合“偶行左→右、奇行右→左”的蛇形坐标路径。
⚠️ 注意事项:
- 坐标格式为 (column, row)(非 (row, column)),这是由题目示例结果明确规定的(如 (0,0), (1,4) 等均体现列在前、行在后);
- field 是一个非空嵌套列表,每行长度可不等,但代码已通过 len(row) 动态适配;
- reverse_list 函数虽可直接用 reversed() 或切片替代,但保留它体现了模块化与复用设计意图;
- 时间复杂度为 O(N)(N 为总单元格数),空间复杂度为 O
(1)(除输出列表外无额外增长空间)。
该实现简洁、可读性强,且严格满足题目对路径方向与坐标格式的双重约束,适用于自动化耕作模拟、矩阵扫描、UI 渲染序等实际场景。
# 切片
# len
# column
# ui
# 自动化
# 遍历
# 行号
# 是一个
# 这是
# 是一种
# 适用于
# 对其
# 又能
# 可直接
# 而非
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何在万网自助建站中设置域名及备案?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
如何确保西部建站助手FTP传输的安全性?
如何制作一个表白网站视频,关于勇敢表白的小标题?
javascript基本数据类型及类型检测常用方法小结
微信小程序 require机制详解及实例代码
如何在服务器上配置二级域名建站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
Laravel中的Facade(门面)到底是什么原理
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何快速上传自定义模板至建站之星?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
,网页ppt怎么弄成自己的ppt?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
微信小程序 HTTPS报错整理常见问题及解决方案
如何在香港服务器上快速搭建免备案网站?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Bootstrap CSS布局之列表
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel如何集成Inertia.js与Vue/React?(安装配置)
如何在云服务器上快速搭建个人网站?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何在阿里云部署织梦网站?
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
如何在云主机上快速搭建多站点网站?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
简历在线制作网站免费版,如何创建个人简历?
Laravel观察者模式如何使用_Laravel Model Observer配置
北京企业网站设计制作公司,北京铁路集团官方网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
jQuery validate插件功能与用法详解
利用vue写todolist单页应用
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何用PHP快速搭建高效网站?分步指南


(1)(除输出列表外无额外增长空间)。