ЛВ
Любовь Виноградова

Объясните. . 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';

ВС
Вячеслав Сюникаев

По моему, код из ответа http://otvet.mail.ru/answer/485352594 точно выполняющий задачу "Заполнить матрицу размера NxN целыми числами 1,2,...n^2 . зигзагом. " все же несколько проще, чем эта мешанина. Не лучше ли попробовать разобраться в нем?

Похожие вопросы
Помогите по паскалю решить задачку PLEASE!!!!
Помогите, please, написать программку на языке Java!!!))
Вопрос Программистам! HELP ME, PLEASE!
help me please with С++ :))
Почему и из-за чего компьютер зависает? Люди дОбрые Помогите please...
работа с файлами. Pascal(help please)
Невилл Лонгботтом. Объясните смысл фамилии, please.
HELP!!please)) Объясните, пожалуйста, как решается эта задача!
Help mee please )))
HEEEEEEEEEEEEEEEEELP Please please please!!!