04075: 矩阵旋转
http://cs101.openjudge.cn/practice/04075/
给定一个n*n的矩阵,求出该矩阵顺时针旋转90度后的矩阵。
输入
第一行为矩阵的数量M(1<=M<=100),其后每个矩阵数据的第一行是该矩阵的行数(行数=列数)n(1<=n<=100),后面跟着n行数据,每行是矩阵在该行的列数据,数字间由空格隔开。
输出
输出N个矩阵,每个矩阵由若干行构成,每行代表矩阵当前行的列数据,数字间由空格隔开,每行最后一个数字后面不输出空格。
样例输入
1
2
1 2
3 4样例输出
3 1
4 2对于一个 n x n 矩阵,逆时针旋转90度后的坐标变换规则如下:
- 原来的行号 i 变为新列的位置。
- 原来的列号 j 变为 n - 新行的位置 - 1。
具体来说,如果我们将矩阵逆时针旋转90度,则原坐标 (i, j) 的元素会移动到新坐标 (n - j - 1, i)。这里 n - j - 1 是因为数组索引是从0开始的,所以需要减去1来计算新的行位置。
python
def rotate_matrix_90(matrix):
n = len(matrix)
return [[matrix[n - j - 1][i] for j in range(n)] for i in range(n)]
def print_matrix(matrix):
for row in matrix:
print(' '.join(map(str, row)))
def main():
M = int(input())
results = []
for _ in range(M):
n = int(input())
matrix = [list(map(int, input().split())) for _ in range(n)]
rotated = rotate_matrix_90(matrix)
results.append(rotated)
for result in results:
print_matrix(result)
if __name__ == "__main__":
main()顺时针90度旋转,坐标变换的规则会有所不同。具体来说,原矩阵中的元素位置 (i, j) 在顺时针旋转90度后,将移动到新的位置 (j, n - i - 1)。这里,原来的行号 i 变成了新列的位置,而原来的列号 j 则变成了 n - 新行的位置 - 1(因为数组索引从0开始)。
应用顺时针旋转90度的转换公式 [[matrix[j][n - i - 1] for j in range(n)] for i in range(n)]