对于旋转,按顺序读取元素:
i -> 0 到 n-1 和 j = 0
j -> 0 到 n-1 和 i = n-1
i -> n-1 到 0 和 j = n-1
j -> n-1 到 0 并且 i = 0
import collections
def shiftMatrix(matrix, layers, num,rotate_direction):
for count in range(layers):
temp1 = []
i = count
for j in range(count, num - count):
temp1.append(matrix[i][j])
j = num - 1 - count
for i in range(1 + count, num - count -1):
temp1.append(matrix[i][j])
i = num - 1 - count
for j in range(num - 1 - count, -1 + count, -1):
temp1.append(matrix[i][j])
j = count
for i in range(num - 1 - count - 1, 0 + count, -1):
temp1.append(matrix[i][j])
temp = collections.deque(temp1)
temp.rotate(rotate_direction)
temp1 = list(temp)
counter = 0
i = count
for j in range(count, num - count):
matrix[i][j] = temp1[counter]
counter += 1
j = num - 1 - count
for i in range(1 + count, num - count -1):
matrix[i][j] = temp1[counter]
counter += 1
i = num - 1 - count
for j in range(num - 1 - count, -1 + count, -1):
matrix[i][j] = temp1[counter]
counter += 1
j = count
for i in range(num - 1 - count - 1, 0 + count, -1):
matrix[i][j] = temp1[counter]
counter += 1
return matrix
if __name__ == '__main__':
num = int(raw_input())
op_type = raw_input()
matrix = []
for i in range(num):
temp = []
input_string = raw_input().split()
for element in input_string:
temp.append(int(element))
matrix.append(temp)
if(num >= 3):
layers = num - 3 + 1
else:
layers = 1
if(op_type == "CW"):
matrix_result = shiftMatrix(matrix,layers,num,1);
else:
matrix_result = shiftMatrix(matrix,layers,num,-1);
print(" ".join((" ".join(map(str,element))) for element in matrix_result))
说明:
大小为 N 的矩阵的层数为 N-3。对于每一层,元素都以顺时针方式收集,然后转换为顺时针或逆时针旋转的队列。