news 2026/8/4 15:46:27

Z字形扫描ccf

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 分对角线 + 按对角线编号奇偶交替方向

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/1 19:20:36

【完整源码+数据集+部署教程】蘑菇种类系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 蘑菇作为一种重要的食用和药用菌类&#xff0c;因其丰富的营养价值和独特的风味而受到广泛关注。然而&#xff0c;蘑菇的种类繁多&#xff0c;形态各异&#xff0c;且许多种类在外观上极为相似&#xff0c;这给蘑菇的识别和分类带来了极大的挑战。传统的蘑菇分类方…

作者头像 李华
网站建设 2026/8/2 20:37:08

5、网络扫描与服务枚举技术全解析

网络扫描与服务枚举技术全解析 在网络安全和渗透测试领域,了解目标主机的开放端口、运行的服务以及操作系统类型是至关重要的。本文将深入介绍各种端口扫描技术、操作系统指纹识别方法以及远程服务枚举的相关内容。 端口扫描技术 端口扫描是确定目标主机上哪些端口处于开放…

作者头像 李华
网站建设 2026/8/4 11:01:50

Vue3 setup()函数终极攻略:从入门到精通

一、setup()函数的核心定位与设计哲学1.1 响应式系统的基石Vue3的setup()函数是响应式系统的核心入口&#xff0c;它替代了Vue2的data、computed、methods等选项式API。通过setup()&#xff0c;开发者可以更灵活地组织组件逻辑&#xff0c;实现逻辑复用和代码解耦。// Vue2选项…

作者头像 李华
网站建设 2026/8/3 14:50:45

17、Linux与Unix安全技术指南

Linux与Unix安全技术指南 1. 信息收集与漏洞查找 1.1 公开信息收集 招聘信息 :通过搜索招聘信息来发现潜在的管理弱点。 搜索引擎 :利用搜索引擎查找目标相关信息,同时要注意防范搜索引擎带来的安全漏洞。 EDGAR和Usenet :搜索EDGAR和Usenet存档以发现管理方面的不…

作者头像 李华
网站建设 2026/8/3 21:08:57

4、网络信息收集与扫描技术全解析

网络信息收集与扫描技术全解析 在网络安全领域,了解如何收集目标组织的信息以及对网络进行扫描是至关重要的。本文将详细介绍区域互联网注册管理机构(RIR)查询、DNS反向查找、邮件交换记录查询、区域传输、路由跟踪以及网络扫描等关键技术,同时也会给出相应的防范措施。 …

作者头像 李华
网站建设 2026/8/3 16:33:29

ISTA 3B:医疗产品运输安全关键标准

在当今全球化医疗供应链中&#xff0c;医疗器械、生物制剂和药品的运输安全成为行业关注焦点。这些高价值、高敏感性产品往往对震动、冲击、温湿度变化极为敏感&#xff0c;一次不当运输可能导致产品失效&#xff0c;甚至威胁患者安全。ISTA 3B标准作为国际公认的专业运输测试程…

作者头像 李华