克隆网站到wordpress修改,如何将vs做的网站备份出来,app排版网站,重庆建设集团二维数组的旋转与翻转#xff08;C#xff09;
引言
在计算机科学中#xff0c;二维数组是一种常见的数据结构#xff0c;广泛应用于图像处理、数据挖掘、机器学习等多个领域。二维数组的旋转与翻转是处理二维数据时经常需要用到的操作。本文将详细介绍二维数组的旋转与翻…二维数组的旋转与翻转C
引言
在计算机科学中二维数组是一种常见的数据结构广泛应用于图像处理、数据挖掘、机器学习等多个领域。二维数组的旋转与翻转是处理二维数据时经常需要用到的操作。本文将详细介绍二维数组的旋转与翻转的原理及其在C中的实现方法。
二维数组旋转
旋转原理
二维数组的旋转实质上是对数组元素坐标的变换。对于一个 n×n 的二维数组我们可以将其视为一个正方形网格。旋转操作可以分为顺时针旋转90度、180度、270度。
顺时针旋转90度 坐标变换: 假设原始数组中的元素位于 (i, j) 位置旋转后的新位置将是 (j, n-1-i)。 步骤: 首先将数组沿主对角线从左上角到右下角的对角线进行对称变换。 然后对变换后的数组每一行进行水平翻转。
void Rotate90(vectorvectorint matrix) {int n matrix.size();// Step 1: Transpose the matrix along the main diagonal.for (int i 0; i n; i) {for (int j i 1; j n; j) {swap(matrix[i][j], matrix[j][i]);}}// Step 2: Reverse each row.for (int i 0; i n; i) {reverse(matrix[i].begin(), matrix[i].end());}
}
顺时针旋转180度 坐标变换: 原始位置 (i, j) 旋转后的新位置将是 (n-1-i, n-1-j)。 步骤: 直接对数组进行两次90度旋转即可实现180度旋转。 void Rotate180(vectorvectorint matrix) {Rotate90(matrix);Rotate90(matrix);
}
顺时针旋转270度 坐标变换: 原始位置 (i, j) 旋转后的新位置将是 (n-1-j, i)。 步骤: 直接对数组进行一次90度旋转即可实现270度旋转。 void Rotate270(vectorvectorint matrix) {Rotate90(matrix);
}
二维数组翻转
翻转原理
二维数组的翻转主要包括水平翻转、垂直翻转以及沿对角线翻转。
水平翻转 坐标变换: 原始位置 (i, j) 翻转后的新位置将是 (i, n-1-j)。 步骤: 对数组的每一行进行水平翻转。
void FlipHorizontal(vectorvectorint matrix) {int n matrix.size();for (int i 0; i n; i) {reverse(matrix[i].begin(), matrix[i].end());}
}
垂直翻转 坐标变换: 原始位置 (i, j) 翻转后的新位置将是 (n-1-i, j)。 步骤: 对数组的整体进行垂直翻转。
void FlipVertical(vectorvectorint matrix) {int n matrix.size();for (int i 0; i n / 2; i) {for (int j 0; j n; j) {swap(matrix[i][j], matrix[n - 1 - i][j]);}}
}
沿对角线翻转 坐标变换: 原始位置 (i, j) 翻转后的新位置将是 (j, i)。 步骤: 对数组进行转置。
void FlipDiagonal(vectorvectorint matrix) {int n matrix.size();for (int i 0; i n; i) {for (int j i 1; j n; j) {swap(matrix[i][j], matrix[j][i]);}}
}
总结
通过对二维数组进行旋转和翻转的操作我们可以更加灵活地处理图像和其他二维数据。在实际应用中这些操作往往需要结合具体的业务场景来进行优化以提高效率和减少资源消耗。希望本文的内容能够帮助大家更好地理解和掌握二维数组的旋转与翻转技术。