Pagini recente » Cod sursa (job #163334) | Cod sursa (job #1925271) | Cod sursa (job #462950) | Profil Banana | Cod sursa (job #238280)
Cod sursa(job #238280)
#include<stdio.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define NMax 1000
int uz[NMax*NMax],n,K;
long a[NMax][NMax];
FILE *fin=freopen(InFile,"rt",stdin),*fout=freopen(OutFile,"wt",stdout);
void out()
{
for(int i=1;i<=n;i++)
{for(int j=1;j<=n;j++) printf("%ld ",a[i][j]);
printf("\n");
}
}
void Mat()
{long nr,i,j;
int ok;
a[1][1]=1; uz[1]=1;
for(i=1;i<=n;i++)
{
if(i>1)
{ok=1;
for(nr=i-1;nr<=(i-1)*n&&ok;nr++)
if(uz[nr]==0) ok=0;
if(ok) nr=a[i-1][n]+1;
else nr--;
a[i][1]=nr; uz[nr]=1;
}
for(j=2;j<=n;j++)
if(j!=K)
{nr=a[i][j-1]+1;
while(uz[nr]) nr++;
a[i][j]=nr;
uz[nr]=1;
}
else {nr=a[i-1][K]+2;
while(uz[nr]) nr+=2;
a[i][K]=nr;
uz[nr]=1;
}
}
if(a[n][n]>n*n)
{ok=1;
for(i=1;i<=n*n&&ok;i++)
if(uz[i]==0) ok=0;
a[n][n]=i-1; uz[i-1]=1;
}
}
void valid()
{int i,j;
long nr;
if(a[n][n]<a[n][n-1])
{a[n-1][n]+=a[n][n];
a[n][n]=a[n-1][n]-a[n][n];
a[n-1][n]-=a[n][n];
i=1; nr=a[n][n];
while(i<=n&&a[n][n]>a[n][i]) i++;
if(i<n)
{
for(j=n;j>=i;j--) a[n][j+1]=a[n][j];
a[n][i]=nr;
}
}
}
int main()
{long i,j;
scanf("%d %d",&n,&K);
fclose(fin);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=i*j;
if(K%2==0) out();
else
{
Mat();
valid();
out();
}
fclose(fout);
return 0;
}