Pagini recente » Cod sursa (job #3136790) | Cod sursa (job #2331665) | Cod sursa (job #419313) | Cod sursa (job #2349539) | Cod sursa (job #231049)
Cod sursa(job #231049)
#include <stdio.h>
#define MAX_N 1024
int A[MAX_N][MAX_N], N, K;
int IsFree(int nr, int X)
{
if (nr % 2 == 1) return 1;
if (X <= nr && nr <= X + 2 * (N-1)) return 0;
return 1;
}
void Solve()
{
int i, j, X, nr;
if (N % 2 == 0)
X = K * N;
else
X = K * (N - 1);
for (i = 0; i < N; i++)
A[i][K] = X + 2 * i;
nr = 1;
for (j = 0; j < N; j++)
if (j != K)
for (i = 0; i < N; i++)
{
A[i][j] = nr;
nr++;
if (!IsFree(nr, X)) nr++;
}
}
/*
int U[MAX_N*MAX_N];
int Check()
{
int i, j, last;
for (i = 1; i <= N * N; i++) U[i] = 0;
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
{
if (A[i][j] < 1 || A[i][j] > N * N) return 0;
if (U[ A[i][j] ]) return 0;
U[ A[i][j] ] = 1;
}
for (i = 1; i <= N * N && U[i]; i++);
if (i < N * N) return 0;
for (i = 0; i < N; i++)
{
last = 0;
for (j = 0; j < N; j++)
{
if (!(A[i][j] > last)) return 0;
last = A[i][j];
}
}
for (i = 0; i < N; i++)
if (A[i][K] % 2 != 0) return 0;
return 1;
}
void Test(int testK)
{
K = testK - 1;
Solve();
if (!Check()) printf("Incorrect on K = %d :(\n", testK);
}
void Testcases()
{
int i;
while (1)
{
scanf("%d", &N);
Test(2);
Test(N-1);
Test(N / 2);
Test(N / 2 + 1);
for (i = 3; i < N; i += N / 7)
Test(i);
printf("Done testing...\n");
}
}
*/
int main()
{
freopen("tablete.in", "r", stdin);
scanf("%d %d", &N, &K);
K--;
Solve();
freopen("tablete.out", "w", stdout);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
if (j + 1 == N)
printf("%d", A[i][j]);
else
printf("%d ", A[i][j]);
printf("\n");
}
return 0;
}