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

Z字形扫描ccf

一、Z 字形扫描规则总结(非常关键)

对于一个 n × n 矩阵:

所有元素都位于若干条 副对角线 上

副对角线编号:

d = 行号 i + 列号 j

范围:0 ~ 2n-2

扫描顺序:

按 d = 0 → 2n-2 依次扫描

每条对角线的遍历方向固定为:

从上到下(行递增)

即 i 从小到大

⚠️ 这正好和题目给的样例完全一致

二、以样例为例(4×4)

矩阵:

1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3

按 i + j 分组:

d 元素
0 (0,0) → 1
1 (0,1),(1,0) → 5,3
2 (0,2),(1,1),(2,0) → 3,7,9
3 (0,3),(1,2),(2,1),(3,0) → 9,5,4,7
4 (1,3),(2,2),(3,1) → 6,6,3
5 (2,3),(3,2) → 4,1
6 (3,3) → 3

拼接后正是:

1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3

三、Java 实现(推荐,O(n²),n≤500 完全没问题)

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();int[][]a=newint[n][n];for(inti=0;i<n;i++){for(intj=0;j<n;j++){a[i][j]=sc.nextInt();}}StringBuildersb=newStringBuilder();// d = i + jfor(intd=0;d<=2*n-2;d++){for(inti=0;i<n;i++){intj=d-i;if(j>=0&&j<n){sb.append(a[i][j]).append(" ");}}}// 去掉末尾空格System.out.println(sb.toString().trim());}}

一、为什么你会得到这个“错误输出”?

你得到的是:

1 5 3 3 7 9 9 5 4 7 6 6 3 4 1 3

而正确答案是:

1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3

根本原因只有一句话:

题目中的“Z 字形扫描”不是“每条对角线都同方向”
而是“对角线方向交替变化”

我之前给你的代码是:

for (d = 0 … 2n-2)
for (i 从小到大)
输出 a[i][d-i]

👉 这叫 单向对角线扫描
👉 不是题目要求的 Zigzag

二、真正的 Zigzag 规则(以题目为准)

仍然按:

d = i + j

分组,但 遍历方向取决于 d 的奇偶性:

规则总结
d 的奇偶 遍历方向
d 为偶数 从下往上(i 大 → i 小)
d 为奇数 从上往下(i 小 → i 大)

这才是 Z 字形 的来源(方向来回折返)

三、用样例严格验证一遍(关键)
d = 2(偶数)

对角线元素:

(0,2)=3
(1,1)=7
(2,0)=9

偶数 ⇒ 反向输出:

9 7 3

✔️ 正确答案中正是这个顺序

d = 3(奇数)
(0,3)=9
(1,2)=5
(2,1)=4
(3,0)=7

奇数 ⇒ 正向输出:

9 5 4 7

✔️ 完全一致

四、修正后的正确 Java 代码 ✅

importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);intn=sc.nextInt();int[][]a=newint[n][n];for(inti=0;i<n;i++){for(intj=0;j<n;j++){a[i][j]=sc.nextInt();}}StringBuildersb=newStringBuilder();for(intd=0;d<=2*n-2;d++){if(d%2==0){// 偶数:从下往上for(inti=n-1;i>=0;i--){intj=d-i;if(j>=0&&j<n){sb.append(a[i][j]).append(" ");}}}else{// 奇数:从上往下for(inti=0;i<n;i++){intj=d-i;if(j>=0&&j<n){sb.append(a[i][j]).append(" ");}}}}System.out.println(sb.toString().trim());}}

五、为什么这种才叫“Z 字形”?

如果你把方向画出来:

↘ ↗ ↘ ↗ ↘

就会发现路径在 对角线上不断来回折返,视觉上是一个连续的 Z / 反 Z / Z / 反 Z

👉 这和 JPEG 的 Zigzag 扫描是同一个思想

六、总结一句(非常适合考试 / 面试)

Zigzag 扫描 =
按 i+j 分对角线 + 按对角线编号奇偶交替方向

http://www.cnnetsun.cn/news/62709.html

相关文章:

  • 7、远程服务安全攻防全解析
  • 18、网络安全防护:psad与fwsnort的应用与集成
  • 30、深入探索fwknop:安全访问与防护机制详解
  • 31、编程技巧与实用程序解析
  • 38、深入探索 gawk 扩展开发:性能优化与功能定制
  • 数据结构之递归-如何巧妙利用递归函数的返回值
  • 46、深入探索编程符号、函数与操作:从基础到高级应用
  • 论AI时代下 “马扁” 子的趋势分析(一)
  • 7天拿下微软PowerBI证书真的太香了
  • JSP中如何设计大文件上传的交互界面与用户体验?
  • wangEditor粘贴ppt幻灯片转存网页兼容处理
  • 从 paperxie 到工具矩阵:AI 开题报告工具如何帮你突破 “学术启动瓶颈”?
  • 工具矩阵:开题报告写作的 “规范效率工具箱”——9款 AI 工具的场景化适配实践
  • 咱们唠一下:单例Bean的“出生记”——从“零”到“成品”的全过程
  • Qt快速检测Ubuntu进程状态
  • 73、Sendmail配置参数详解
  • 【超全】基于SSM的企业客户管理系统【包括源码+文档+调试】
  • 数据点的“社交距离”:衡量它们之间的相似与差异
  • 论文格式魔法全书:用Word通配符和宏一键完成专业排版
  • 如果GPT-5.2可以胜任你的大部分工作,你会选择全面拥抱它,还是会恐惧它带来的冲击?它会让你更自由,还是更焦虑?
  • 2026年大模型学习资源全攻略:从零到精通,小白到程序员,一篇超详细的从入门到精通大模型学习指南!
  • 15、优化Windows系统性能:媒体定制与系统分析指南
  • 【软考系统架构设计师】六、软件工程
  • 【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
  • 数控滑台的基本概念
  • FMD辉芒微电子8位微控制器芯片,荣获“深圳市制造业单项冠军企业”认定
  • Unity XR 编辑器VR设备模拟功能
  • 国产银河麒麟SP3服务器部署mysql主从同步
  • BabylonJS开发:从零基础到项目实战
  • HDF5文件学习笔记