
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
int main() {
bool N1[10][10] = {false};
char N[10][10] = {'.'};
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
N[i][j] = '.';
}
}
srand((unsigned) time(NULL));
int ways;
int i = 0, j = 0;
N[0][0] = 'A';
N1[0][0] = true;
for (int alphabet = 1; alphabet <= 25;) {
ways = rand() % 4;
if ( ways == 0) {
if (j - 1 < 0) {
continue;
} else if (N1[i][j - 1] == true) {
if ((N[i - 1][j] == true && N[i + 1][j] == true && N[i][j + 1] == true) ||
(N[i - 1][j] == true && N[i][j + 1] == true && i + 1 > 9 ) ||
(N[i - 1][j] == true && i + 1 > 9 && j + 1 > 9) ||
(i - 1 < 0 && N[i + 1][j] == true && N[i][j + 1] == true) ||
(i - 1 < 0 && j + 1 > 9 && N[i + 1][j] == true) ||
(N[i - 1][j] == true && N[i + 1][j] == true && j + 1 > 9))
continue;
} else {
N[i][j - 1] = 'A' + alphabet;
N1[i][j - 1] = true;
alphabet++;
j--;
}
}
if ( ways == 1) {
if (i + 1 > 9) {
continue;
} else if (N1[i + 1][j] == true) {
if ((N[i][j - 1] == true && N[i - 1][j] == true && j + 1 > 9) ||
(N[i][j - 1] == true && i - 1 < 0 && j + 1 > 0) ||
(N[i][j + 1] == true && N[i][j - 1] == true && i - 1 < 0) ||
(j - 1 < 0 && N[i - 1][j] == true && N[i][j + 1] == true) ||
(j - 1 < 0 && i - 1 < 0 && N[i][j + 1] == true) ||
(N[i][j + 1] == true && N[i][j - 1] == true && N[i - 1][j] == true))
continue;
} else {
N[i + 1][j] = 'A' + alphabet;
N1[i + 1][j] = true;
alphabet++;
i++;
}
}
if (ways == 2) {
if (j + 1 > 9) {
continue;
} else if (N1[i][j + 1] == true) {
if ((N[i][j - 1] == true && N[i - 1][j] == true && N[i + 1][j] == true) ||
(N[i - 1][j] == true && N[i][j - 1] == true && i + 1 > 9) ||
(N[i - 1][j] == true && i - 1 < 0 && j + 1 > 0) ||
(N[i + 1][j] == true && N[i][j - 1] == true && i - 1 < 0) ||
(i - 1 < 0 && j - 1 < 0 && N[i + 1][j] == true) ||
(N[i - 1][j] == true && N[i + 1][j] == true && j - 1 < 0))
continue;
} else {
N[i][j + 1] = 'A' + alphabet;
N1[i][j + 1] = true;
alphabet++;
j++;
}
}
if (ways == 3) {
if (i - 1 < 0) {
continue;
} else if (N1[i - 1][j] == true) {
if ((N[i][j - 1] == true && N[i][j + 1] == true && i + 1 > 9) ||
(N[i][j - 1] == true && N[i + 1][j] == true && j + 1 > 9) ||
(N[i][j - 1] == true && i + 1 > 9 && j + 1 > 9) ||
(j - 1 < 0 && j + 1 > 9 && N[i + 1][j] == true) ||
(j - 1 < 0 && N[i + 1][j] == true && N[i][j + 1] == true) ||
(j + 1 < 0 && i + 1 > 9 && N[i][j + 1] == true))
continue;
} else {
N[i - 1][j] = 'A' + alphabet;
N1[i - 1][j] = true;
alphabet++;
i--;
}
}
}
for (int x = 0; x < 10; x++) {
for (int y = 0; y < 10; y++) {
printf("%c ", N[x][y]);
if (y == 9) {
printf("\n");
}
}
}
return 0;
}