CSP201412-2:Z字形扫描
2018-06-17 21:12:21来源:未知 阅读 ()
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试,针对计算机软件开发、软件测试、信息管理等领域的专业人士进行能力认证。认证对象是从事或将要从事IT领域专业技术与技术管理人员,以及高校招考研究生的复试对象。
-
问题描述
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:
对于下面的4×4的矩阵,
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
对其进行Z字形扫描后得到长度为16的序列:
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。
-
输入格式
输入的第一行包含一个整数n,表示矩阵的大小。
输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。
-
输出格式
输出一行,包含n×n个整数,由空格分隔,表示输入的矩阵经过Z字形扫描后的结果。
-
样例输入
4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
-
样例输出
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
-
评测用例规模与约定
1≤n≤500,矩阵元素为不超过1000的正整数。
-
源代码
# include <stdio.h> # include <stdlib.h> # include <memory.h>
int main(void) { int n; //矩阵规模 scanf("%d", &n);
//创建矩阵(二维数组)并分配空间 int **pInput = (int **)malloc(sizeof(int *) * n); for (int i = 0; i < n; i++) { pInput[i] = (int *)malloc(sizeof(int) * n); memset(pInput[i], 0, sizeof(int) * n); } //创建输出数组 int *pOutput = (int *)malloc(sizeof(int) * n * n); memset(pOutput, 0, sizeof(int) * n * n);
//矩阵输入 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &pInput[i][j]); } }
int j = 0; int k = 0; int state = 1; pOutput[0] = pInput[0][0]; for (int i = 1; i < n*n; i++) { switch (state) { case 1:{ //向右 k += 1; pOutput[i] = pInput[j][k]; if (j == 0) { state = 2; } else { state = 4; } break; } case 2:{ //向左下 j += 1; k -= 1; pOutput[i] = pInput[j][k];
if (k == 0 || j == n - 1) { if (j == n - 1) { state = 1; } else { state = 3; } } else { state = 2; } break; } case 3:{ //向下 j += 1; pOutput[i] = pInput[j][k]; if (k == 0) { state = 4; } else { state = 2; } break; } case 4:{ //向右上 j -= 1; k += 1; pOutput[i] = pInput[j][k];
if (j == 0 || k == n - 1) { if (k == n - 1) { state = 3; } else { state = 1; } } else { state = 4; } break; } default:{ break; } } }
for (int i = 0; i < n * n - 1; i++) { printf("%d ", pOutput[i]); } printf("%d\n", pOutput[n * n - 1]);
//释放矩阵(二位数组)空间 for (int i = 0; i < n; i++) { free(pInput[i]); } free(pInput); //释放输出数组空间 free(pOutput);
return 0; } |
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Z 字形变换 2020-04-14
- 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6 2019-08-31
- 201412-2 Z字形扫描(c语言) 2019-08-16
- 扫描线——POJ1151 2019-08-16
- POJ 1151 Atlantis 矩形面积求交/线段树扫描线 2019-04-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash