ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AcWing 3208. Z字形扫描(模拟)

2021-10-27 17:04:43  阅读:165  来源: 互联网

标签:输出 字形 int 扫描 矩阵 3208 给定 AcWing


【题目描述】
在图像编码的算法中,需要将一个给定的方形矩阵进行 Z Z Z字形扫描 ( Z i g z a g   S c a n ) (Zigzag\ Scan) (Zigzag Scan)。
给定一个 n × n n×n n×n的矩阵, Z Z Z字形扫描的过程如下图所示:

在这里插入图片描述

对于下面的 4 × 4 4×4 4×4的矩阵,

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

对其进行 Z Z Z字形扫描后得到长度为 16 16 16的序列:1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
请实现一个 Z Z Z字形扫描的程序,给定一个 n × n n×n n×n的矩阵,输出对这个矩阵进行 Z Z Z字形扫描的结果。

【输入格式】
输入的第一行包含一个整数 n n n,表示矩阵的大小。
输入的第二行到第 n + 1 n+1 n+1行每行包含 n n n个正整数,由空格分隔,表示给定的矩阵。

【输出格式】
输出一行,包含 n × n n×n n×n个整数,由空格分隔,表示输入的矩阵经过 Z Z Z字形扫描后的结果。

【数据范围】
1 ≤ n ≤ 500 1≤n≤500 1≤n≤500
矩阵元素为不超过 1000 1000 1000的正整数。

【输入样例】

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

【分析】


将矩阵往右和往下各扩展一倍,然后从第一行开始枚举,枚举至第 2 n − 1 2n-1 2n−1行,如果是奇数行,那么从下往上沿对角线走,如果坐标在原矩阵内则输出元素值;如果是偶数行,那么从上往下沿对角线走,如果坐标在原矩阵内则输出元素值。


【代码】

#include <iostream>
using namespace std;

const int N = 510;
int a[N][N];
int n;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			cin >> a[i][j];
	for (int i = 1; i <= 2 * n - 1; i++)//枚举1~2n-1行
		if (i % 2 == 0)
			for (int j = 1; j <= i; j++)//如果为偶数行那么从第一行开始往下走
				if (j <= n && i - j + 1 <= n)//坐标在范围内则输出
					cout << a[j][i - j + 1] << ' '; else;
		else
			for (int j = i; j; j--)//如果为奇数行那么从第i行开始往上走
				if (j <= n && i - j + 1 <= n)//坐标在范围内则输出
					cout << a[j][i - j + 1] << ' '; else;
	return 0;
}

标签:输出,字形,int,扫描,矩阵,3208,给定,AcWing
来源: https://blog.csdn.net/m0_51755720/article/details/120996802

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有