Угадайте-ка, что делает написанная ниже программа.
#include <iostream>
using namespace std; struct scol{long v; scol *ncol;}; struct srow{srow *nrow; scol *col;};
int main() { long k; bool bo=false; srow *frow,*trow; frow=new srow; trow=frow;
{ scol *tcol; tcol=new scol; tcol->v=0; tcol->ncol=0; frow->col=tcol; frow->nrow=0;
for (long i=1;i<26;i++) { scol *lcol=tcol; tcol=new scol; tcol->v=(i==1)?1:1000; tcol->ncol=0;
lcol->ncol=tcol; } } for (long i=1;i<'z'-'a'+1;i++) { srow *lrow=trow; trow=new srow; trow->nrow=0; lrow->nrow=trow;
scol *tcol; tcol=new scol; tcol->v=(i=='z'-'a')?1:1000; tcol->ncol=0; trow->col=tcol; for (long j=1;j<'z'-'a'+1;j++)
{ scol *lcol=tcol; tcol=new scol; tcol->v=((i!='z'-'a')&&(j==i+1))?1:1000;
tcol->ncol=0; if (i==j) tcol->v=0;
lcol->ncol=tcol; } } srow *row=frow; scol *col; for (long k=0;k<'z'-'a'+1;k++) for (long i=0;i<'z'-'a'+1;i++)
for (long j=0;j<'z'-'a'+1;j++) { srow *row1=frow,*row2=frow,*row3; for (long l=1;l<=i;l++) row1=row1->nrow;
for (long l=1;l<=k;l++) row2=row2->nrow; row3=row1; scol *col1=row1->col,*col2=row2->col,*col3=ro
w3->col;
for (long l=1;l<=k;l++) col1=col1->ncol; for (long l=1;l<=j;l++) col2=col2->ncol; for (long l=1;l<=j;l++)
col3=col3->ncol; if (col3->v>col1->v+col2->v) col3->v=col1->v+col2->v; } long M,N; cin>>N>>M; if (N!=2||M<10)
bo=true; { cin>>k; k--; if (k<0||k>25) bo=true; { scol *fmas1,*cmas1,*fmas2,*cmas2; fmas1=0; cmas1=0;
fmas2=0; cmas2=0; fmas1=new scol; fmas1->v=k; fmas1->ncol=0; cmas1=fmas1; for (long i=1;i<M;i++) {cin>>k; k--;
if (k<0||k>25) bo=true; scol *lmas=cmas1; cmas1=new scol; cmas1->v=k; cmas1->ncol=0; lmas->ncol=cmas1; }
if (N>1) { cin>>k; k--; if (k<0||k>25) bo=true; { fmas2=new scol; fmas2->v=k; fmas2->ncol=0; cmas2=fmas2;
for (long i=1;i<M;i++) { cin>>k; k--; if (k<0||k>25) bo=true; scol *lmas=cmas2; cmas2=new scol; cmas2->v=k;
cmas2->ncol=0; lmas->ncol=cmas2; } } if (N>2) { for (long i=2;i<N;i++) for (long j=0;j<M;j++) cin>>k; }
if (bo==false) { long q=0; cmas1=fmas1; while (cmas1->ncol!=0) { row=frow; for (long i=0;i<cmas1->v;i++)
row=row->nrow; col=row->col; for (long i=0;i<cmas1->ncol->v;i++) col=col->ncol; q+=col->v; cmas1=cmas1->ncol;
} cmas2=fmas2; while (cmas2->ncol!=0) { row=frow; for (long i=0;i<cmas2->v;i++) row=row->nrow; col=row->col;
for (long i=0;i<cmas2->ncol->v;i++) col=col->ncol; q-=col->v; cmas2=cmas2->ncol; } if (q!=0) { cout<<M<<" -1";
col=fmas1; while (col!=0) { scol *lcol=col->ncol; delete(col); col=lcol; } col=fmas2; while (col!=0) {
scol *lcol=col->ncol; delete(col); col=lcol; } /* cmas2=fmas2; while (cmas2!=0) { scol *lmas=cmas2->ncol; delete(cmas2);
cmas2=lmas; } cmas1=fmas1; while (cmas1!=0) { scol *lmas=cmas1->ncol; delete(cmas1); cmas1=lmas; }*/ } else {
row=frow; for (long i=1;i<=fmas2->v;i++) row=row->nrow; col=row->col; for (long j=1;j<=fmas1->v;j++) col=col->ncol;
q=col->v; cmas1=fmas1->ncol; cmas2=fmas2->ncol; bool b=true; for (long i=1;i<M;i++) { struct scolii { int v;
bool fl; scolii *next; }; scolii *fcolii,*tcolii; row=frow; for (long j=0;j<fmas1->v;j++) row=row->nrow; col=row->col;
fcolii=new scolii; fcolii->v=col->v; fcolii->fl=0; fcolii->next=0; tcolii=fcolii; col=col->ncol;
for (int j=1;j<'z'-'a'+1;j++) { scolii *lcolii=tcolii; tcolii=new scolii; tcolii->v=col->v; tcolii->fl=0;
tcolii->next=0; lcolii->next=tcolii; col=col->ncol; } for (int err=0;err<25;err++) { int min=1000,k=0; tcolii=fcolii;
for (int i=1;i<=fmas1->v;i++) tcolii=tcolii->next; tcolii->fl=1; tcolii=fcolii; for (int j=0;j<'z'-'a'+1;j++)
{ if (tcolii->fl==0&&tcolii->v<min) { min=tcolii->v; k=j; } tcolii=tcolii->next; } tcolii=fcolii;
scolii *tcolii2=tcolii; for (int j=1;j<=k;j++) tcolii2=tcolii2->next; for (int j=0;j<'z'-'a'+1;j++) { row=frow;
for (int e=1;e<=k;e++) row=row->nrow; col=row->col; for (int e=1;e<=j;e++) col=col->ncol; if (tcolii->v>tcolii2->v+col->v)
tcolii->v=tcolii2->v+col->v; tcolii=tcolii->next; } } tcolii=fcolii; for (int j=1;j<=cmas1->v;j++) tcolii=tcolii->next;
int q1=tcolii->v; tcolii=fcolii; while (tcolii!=0) { scolii *lcolii=tcolii->next; delete(tcolii); tcolii=lcolii;
} row=frow; for (long j=0;j<fmas2->v;j++) row=row->nrow; col=row->col; fcolii=new scolii; fcolii->v=col->v;
fcolii->fl=0; fcolii->next=0; tcolii=fcolii; col=col->ncol; for (int j=1;j<'z'-'a'+1;j++) { scolii *lcolii=tcolii;
tcolii=new scolii; tcolii->v=col->v; tcolii->fl=0; tcolii->next=0; lcolii->next=tcolii; col=col->ncol; }
for (int err=0;err<25;err++) { int min=1000,k=0; tcolii=fcolii; for (int i=1;i<=fmas2->v;i++) tcolii=tcolii->next;
tcolii->fl=1; tcolii=fcolii; for (int j=0;j<'z'-'a'+1;j++) { if (tcolii->fl==0&&tcolii->v<min) { min=tcolii->v;
k=j; } tcolii=tcolii->next; } tcolii=fcolii; scolii *tcolii2=tcolii; for (int j=1;j<=k;j++) tcolii2=tcolii2->next;
for (int j=0;j<'z'-'a'+1;j++) { row=frow; for (int e=1;e<=k;e++) row=row->nrow; col=row->col; for (int e=1;e<=j;e++)
col=col->ncol; if (tcolii->v>tcolii2->v+col->v) tcolii->v=tcolii2->v+col->v; tcolii=tcolii->next; } } tcolii=fcolii;
for (int j=1;j<=cmas2->v;j++) tcolii=tcolii->next; int q2=tcolii->v; tcolii=fcolii; while (tcolii!=0) {
scolii *lcolii=tcolii->next; delete(tcolii); tcolii=lcolii; } if (q1!=q2) b=false; cmas1=cmas1->ncol; cmas2=cmas2->ncol;
} if (!b) cout<<M<<" -1"; else cout<<M<<" "<<q; cmas2=fmas2; while (cmas2!=0) { scol *lmas=cmas2->ncol; delete(cmas2);
cmas2=lmas; } cmas1=fmas1; while (cmas1!=0) { scol *lmas=cmas1->ncol; delete(cmas1); cmas1=lmas; } } } } } } if (bo==true)
cout<<"NOPQ"; row=frow; while (row!=0) { srow *lrow=row->nrow; col=row->col; while (col!=0){ scol *lcol=col->ncol;
delete(col); col=lcol; } row=lrow; } return 0; }