Помогите решить задачу с матрицами на питон
Дана квадратная целочисленная матрица. Требуется переписать все её элементы в одномерный массив по следующему правилу: выбор элементов начинается из правого верхнего и левого нижнего угла и продолжается "змейкой" в сторону главной диагонали. На первой итерации после угловых элементов выбор производится в сторону левого верхнего угла. В конце записываются элементы главной диагонали от левого верхнего угла до правого нижнего.
Входные данные: в первой строке число N - количество строк и столбцов в квадратной матрице, N не превышает 20. Далее в N строках по N чисел через пробел, каждое не превышает 100 по модулю.
Выходные данные: получившийся массив, записанный в одну строку через пробел.

мой код работает только если матрица 3*3
kol=int(input())
a=[]
for i in range(kol):
a.append(list(map(int, input().split())))
b=[]
kol-=1
for i in range(kol):
for j in range(kol,0,-1):
b.append(a[i][j]), b.append(a[j][i])
print(b)
Ответы (2 шт):
#include <bits/stdc++.h>
using namespace std;
int main(){
//ifstream cin("input.txt");
long long n;
cin>>n;
vector <vector <long long> > a(n,vector <long long> (n));
vector <long long>ans(n*n);
for(long long i=n-1;i>=0;i--)for(long long j=0;j<n;j++)cin>>a[i][j];
long long i=n-1;long long j=n-1;
ans[0]=a[i][j];
i--;
bool dir=1;
long long cntr=2;
while(i+j!=n-1){long long curdiag=i+j;
if(dir==1){
for(;i<n;i++){
j=curdiag-i;
ans[cntr]=a[i][j];
cntr+=2;
}
i--;
j--;
dir=!dir;
}
else {
for(;j<n;j++){
i=curdiag-j;
ans[cntr]=a[i][j];
cntr+=2;
}
j--;
i--;
dir=!dir;
}
}
dir=0;
cntr=3;
i=0;j=0;
ans[1]=a[i][j];
j++;
while(i+j!=n-1){long long curdiag=i+j;
if(dir==1){
for(;i>=0;i--){
j=curdiag-i;
ans[cntr]=a[i][j];
cntr+=2;
}
i++;
j++;
dir=!dir;
}
else {
for(;j>=0;j--){
i=curdiag-j;
ans[cntr]=a[i][j];
cntr+=2;
}
j++;
i++;
dir=!dir;
}
}
j=0;i=n-1;
long long curdiag=i+j;
cntr=n*n-n;
for(;i>=0;i--){
j=curdiag-i;
ans[cntr]=a[i][j];
cntr++;
}
for(long long i=0;i<ans.size();i++)cout<<ans[i]<<" ";
}
сделаем несколько наблюдений
во-первых, четные элементы получаются из нечетных перестановкой индексов
во-вторых. если посмотреть на правый верхний угол матрицы, то индексы элементов выглядят так
0,m
0, m-1 1, m
2, m 1, m-1 0, m-2
если перевернуть второй ряд, то получается простой цикл
0,m
1, m 0, m-1
2, m 1, m-1 0, m-2
только брать ряды надо через раз - слева-направо и справа-налево
остальное просто код
matrix= [
[13, 11, 3, 1],
[12, 14, 9, 5],
[4, 10, 15, 7],
[2, 6, 8, 16]
]
m = len(matrix[0])
left = True
for i in range(m-1):
pairs = []
for j in range(i+1):
pairs.append((j, m-i+j-1))
if left:
pairs = pairs[::-1]
left = not left
for x,y in pairs:
print(matrix[x][y])
print(matrix[y][x])
for i in range(m):
print(matrix[i][i])