交换 n x n 矩阵中右上角和左下角方块的函数

问题描述 投票:0回答:1

给定一个 n x n 矩阵,交换两个正方形中的元素。

F.e.你得到:

0 3 1 2
9 2 3 4
5 6 5 7
7 8 9 9

您需要返回:

0 3 5 6
9 2 7 8
1 2 5 7
3 4 9 9

我发现这个函数有两种变体,具体取决于矩阵大小:n 是偶数还是非均匀。 我试图用两个循环来解决这个任务,但我知道我只是交换元素(它是偶数大小的变体):

def Swap4(m,r):
    k = r//2
    if r % 2 != 0:
       for i in range(0, k):
            for j in range(k+1, r):
                t = m[i][j]
                m[i][j] = m[j][i]
                m[j][i] = t
    else:
        for i in range(0, k):
            for j in range(k, r):
                t = m[i][j]
                m[i][j] = m[j][i]
                m[j][i] = t

这里 k 是矩阵大小 n // 2。 然而,在我看来,当我们像这样交换元素时,我们需要在 i 循环中对索引进行某种转换:

[0][2] -> [2][0]
[0][3] -> [2][1]
[1][2] -> [3][0]
[1][3] -> [3][1]
python algorithm matrix
1个回答
0
投票

你根本不需要循环。

如果矩阵的大小为 NxN,您始终可以将

mat[0][N-1]
mat[N-1][0]

交换

def swap_matrix(mat):
    # Assumes matrix is of size N x N
    n = len(mat)
    # Swap the last element of the first row with the first element of the last row
    mat[0][n-1], mat[n-1][0] = mat[n-1][0], mat[0][n-1]
    return mat
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.