Объясните. . please///!!!
Нашел в интернете программу и не пойму часть кода:
#include
#include
using namespace std;
int main ()
{ int j,k,i,N,x=1,y=-1,t;
cout << "(N x N), N="; cin>>N;
int* a=new int[N*N];
int** p=new int*[N];
for(j=0;j-N;p[j++]=&a[j*N]);
for(j=k=i=0;i++-N*N/2;p[k][j]=i,j+=x,k+=y,t=1-2*(j<0||k<0),x*=t,y*=t,j+=(j<0),k+=(k<0));
for(i--;++i-N*N; p[k][j]=i,j+=x,k+=y,t=2*(j>=N||k>=N),x*=1-t,y*=1-t,j+=t-3*(j>=N),k+=t-3*(k>=N));
p[N-1][N-1]=i;
for(j=0;j-N;j++,cout << endl) for(k=0;k-N;k++) cout << p[j][k] << '\t';
return 0;
}
программа написана видимо по этой задаче: Заполнить матрицу размера NxN целыми числами 1,2,...n^2 . зигзагом.
1 2 6 7 ...
3 5 8 ...
4 9 ...
10 ...
....
Объясните пожалуйста эту часть программы, Что как там вычисляется.. .
int* a=new int[N*N];
int** p=new int*[N];
for(j=0;j-N;p[j++]=&a[j*N]);
for(j=k=i=0;i++-N*N/2;p[k][j]=i,j+=x,k+=y,t=1-2*(j<0||k<0),x*=t,y*=t,j+=(j<0),k+=(k<0));
for(i--;++i-N*N; p[k][j]=i,j+=x,k+=y,t=2*(j>=N||k>=N),x*=1-t,y*=1-t,j+=t-3*(j>=N),k+=t-3*(k>=N));
p[N-1][N-1]=i;
for(j=0;j-N;j++,cout << endl) for(k=0;k-N;k++) cout << p[j][k] << '\t';