Pagini recente » Cod sursa (job #2271292) | Cod sursa (job #1157780) | tabletennis | Mihnea Andreescu | Cod sursa (job #557600)
Cod sursa(job #557600)
#include<stdio.h>
#define InFile "tablete.in"
#define OutFile "tablete.out"
#define Nmax 1000
FILE *fin=freopen(InFile,"r",stdin),*fout=freopen(OutFile,"w",stdout);
long a[Nmax+1][Nmax+1];
int n,K,uz[Nmax*Nmax+2];
void Tablete(int i)
{if(i==n+1) return;
int ok=1;
long nr=i*K%2==0?i*K:i*K+1,lg=0,j,v[Nmax+1],nr2;
do
{if(!ok)
{nr+=2; for(j=1;j<=lg;j++) uz[v[i]]=0;}
ok=1;
if(uz[nr]) while(uz[nr]&&nr<=n*n) nr+=2;
a[i][K]=nr; uz[nr]=1; v[++lg]=nr;
for(j=K-1;j>=1&&ok;j--)
{nr2=a[i][j+1]-1;
if(uz[nr2]) while(uz[nr2]&&nr2>=1) nr2--;
if(nr2<=1&&j>1) ok=0;
else {a[i][j]=nr2; uz[nr2]=1; v[++lg]=nr2;}
}
}while(!ok);
Tablete(i+1);
}
int main()
{long i,j,nr;
scanf("%d %d",&n,&K);
fclose(fin);
Tablete(1);
for(i=1;i<=n;i++)
{nr=n-K;
for(j=1;j<=K;j++) printf("%ld ",a[i][j]);
for(j=a[i][K];j<=n*n&&nr;j++)
if(!uz[j]) {printf("%ld ",j); uz[j]=1; nr--;}
printf("\n");
}
fclose(fout);
}