Skip to content

Instantly share code, notes, and snippets.

@Mikle-Bond
Created May 3, 2016 14:58
Show Gist options
  • Save Mikle-Bond/1567698c3be3505cebee6b5e36198a9b to your computer and use it in GitHub Desktop.
Save Mikle-Bond/1567698c3be3505cebee6b5e36198a9b to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
int n;
int *rows = NULL;
// Initialize global arrays
void init_glob (int n)
{
int i = 0;
rows = (int *)malloc(n * sizeof(int));
for (; i < n; i++) {
rows[i] = -1;
}
}
// Free global arrays
void free_glob ()
{
free(rows);
}
void dfs (int seed)
{
static int deepth = 0;
int i = 0;
int j = 0;
rows[deepth] = seed;
deepth += 1;
if (deepth == n) {
for (i = 0; i < n; i++) {
printf("%c%d ", i + 'a', rows[i] + 1);
}
printf("\n");
} else {
int *temp = (int *)calloc(n, sizeof(int));
for (i = 0; i < deepth; i++) {
temp[rows[i]] = 1;
j = deepth - i;
if (rows[i] + j < n)
temp[rows[i] + j] = 1;
if (rows[i] - j >= 0)
temp[rows[i] - j] = 1;
}
for (i = 0; i < n; i++)
if (!temp[i])
dfs(i);
free(temp);
}
deepth -= 1;
rows[deepth] = -1;
}
int main(void)
{
int i = 0;
scanf("%d", &n);
init_glob (n);
for (i = 0; i < n; i++) {
dfs(i);
}
free_glob();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment