Pagini recente » Cod sursa (job #1508610) | Cod sursa (job #812053) | Cod sursa (job #293038) | Cod sursa (job #2772533) | Cod sursa (job #231217)
Cod sursa(job #231217)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("tablete.in");
ofstream fout("tablete.out");
const int NMAX = 1000;
int N,K,A[NMAX + 1][NMAX + 1];
bool este[NMAX*NMAX + 1],gata,nopos;
void gen_t(int sq)
{
if(sq == N*N + 1)
{
gata = true;
}
else
{
int row = (sq-1) / N + 1;
int col = (sq-1) % N + 1;
if(col == K) gen_t(sq + 1);
else
{
for(int i = A[row][col-1] + 1; !gata && i <= N*N; ++i)
if(!este[i])
{
if(col < K && i > A[row][K]) break;
este[i] = true;
A[row][col] = i;
gen_t(sq + 1);
este[i] = false;
}
}
}
}
void afis()
{
for(int i = 1; i <= N; ++i) {
for(int j = 1; j <= N; ++j)
fout<< A[i][j] <<' ';
fout<<'\n';
}
}
void gen_l(int r)
{
if(r == N + 1)
{
gen_t(1);
}
else
{
for(int i = A[r-1][K] + 2; !gata && i <= N*N - (N-K); i+=2)
if(!este[i])
{
A[r][K] = i;
este[i] = true;
gen_l(r + 1);
este[i] = false;
}
}
}
int main()
{
fin>>N>>K;
A[0][K] = K&1 ? K - 1 : K - 2;
gen_l(1);
afis();
return 0;
}