Skip to content

Instantly share code, notes, and snippets.

@corehello
Created March 11, 2017 07:57
Show Gist options
  • Save corehello/abb9803dba2b1915863019dc7c66b06a to your computer and use it in GitHub Desktop.
Save corehello/abb9803dba2b1915863019dc7c66b06a to your computer and use it in GitHub Desktop.
8 queen puzzle solver
#include <stdio.h>
/*
You can define the size of Queens
*/
#define QUEEN 8
int row[QUEEN+1];
int l[2*QUEEN];
int r[2*QUEEN];
int rt[QUEEN+1];
int c=0;
void solve8queen(int level)
{
if (level <= QUEEN)
{
int i = 1;
while(i<=QUEEN)
{
if(row[i]!=1&&l[level+i-1]!=1&&r[QUEEN+i-level]!=1)
{
row[i] = l[level+i-1] = r[QUEEN+i-level] = 1;
rt[level] = i;
solve8queen(level+1);
row[i] = l[level+i-1] = r[QUEEN+i-level] = 0;
}
i++;
}
}
else
{
c++;
int i;
for(i = 1; i<=QUEEN; i++)
{
printf("\t%d", rt[i]);
}
printf("\n");
}
}
int
main(int ac, char *av[])
{
solve8queen(1);
printf("totally: %d solutions\n", c);
return 0;
}
@corehello
Copy link
Author

$ gcc 8queen.c -g -o 8queen
$ ./8queen
        1       5       8       6       3       7       2       4
        1       6       8       3       7       4       2       5
        1       7       4       6       8       2       5       3
        1       7       5       8       2       4       6       3
        2       4       6       8       3       1       7       5
        2       5       7       1       3       8       6       4
        2       5       7       4       1       8       6       3
        2       6       1       7       4       8       3       5
        2       6       8       3       1       4       7       5
        2       7       3       6       8       5       1       4
        2       7       5       8       1       4       6       3
        2       8       6       1       3       5       7       4
        3       1       7       5       8       2       4       6
        3       5       2       8       1       7       4       6
        3       5       2       8       6       4       7       1
        3       5       7       1       4       2       8       6
        3       5       8       4       1       7       2       6
        3       6       2       5       8       1       7       4
        3       6       2       7       1       4       8       5
        3       6       2       7       5       1       8       4
        3       6       4       1       8       5       7       2
        3       6       4       2       8       5       7       1
        3       6       8       1       4       7       5       2
        3       6       8       1       5       7       2       4
        3       6       8       2       4       1       7       5
        3       7       2       8       5       1       4       6
        3       7       2       8       6       4       1       5
        3       8       4       7       1       6       2       5
        4       1       5       8       2       7       3       6
        4       1       5       8       6       3       7       2
        4       2       5       8       6       1       3       7
        4       2       7       3       6       8       1       5
        4       2       7       3       6       8       5       1
        4       2       7       5       1       8       6       3
        4       2       8       5       7       1       3       6
        4       2       8       6       1       3       5       7
        4       6       1       5       2       8       3       7
        4       6       8       2       7       1       3       5
        4       6       8       3       1       7       5       2
        4       7       1       8       5       2       6       3
        4       7       3       8       2       5       1       6
        4       7       5       2       6       1       3       8
        4       7       5       3       1       6       8       2
        4       8       1       3       6       2       7       5
        4       8       1       5       7       2       6       3
        4       8       5       3       1       7       2       6
        5       1       4       6       8       2       7       3
        5       1       8       4       2       7       3       6
        5       1       8       6       3       7       2       4
        5       2       4       6       8       3       1       7
        5       2       4       7       3       8       6       1
        5       2       6       1       7       4       8       3
        5       2       8       1       4       7       3       6
        5       3       1       6       8       2       4       7
        5       3       1       7       2       8       6       4
        5       3       8       4       7       1       6       2
        5       7       1       3       8       6       4       2
        5       7       1       4       2       8       6       3
        5       7       2       4       8       1       3       6
        5       7       2       6       3       1       4       8
        5       7       2       6       3       1       8       4
        5       7       4       1       3       8       6       2
        5       8       4       1       3       6       2       7
        5       8       4       1       7       2       6       3
        6       1       5       2       8       3       7       4
        6       2       7       1       3       5       8       4
        6       2       7       1       4       8       5       3
        6       3       1       7       5       8       2       4
        6       3       1       8       4       2       7       5
        6       3       1       8       5       2       4       7
        6       3       5       7       1       4       2       8
        6       3       5       8       1       4       2       7
        6       3       7       2       4       8       1       5
        6       3       7       2       8       5       1       4
        6       3       7       4       1       8       2       5
        6       4       1       5       8       2       7       3
        6       4       2       8       5       7       1       3
        6       4       7       1       3       5       2       8
        6       4       7       1       8       2       5       3
        6       8       2       4       1       7       5       3
        7       1       3       8       6       4       2       5
        7       2       4       1       8       5       3       6
        7       2       6       3       1       4       8       5
        7       3       1       6       8       5       2       4
        7       3       8       2       5       1       6       4
        7       4       2       5       8       1       3       6
        7       4       2       8       6       1       3       5
        7       5       3       1       6       8       2       4
        8       2       4       1       7       5       3       6
        8       2       5       3       1       7       4       6
        8       3       1       6       2       5       7       4
        8       4       1       3       6       2       7       5
totally: 92 solutions

@corehello
Copy link
Author

This is for n queen:

#include <stdio.h>
#include <stdlib.h>

void solve8queen(int level, int n,int *row, int *l, int *r, int *c)
{
    if (level <= n)
    {
        int i = 1;
        while(i<=n)
        {
            if(row[i]!=1&&l[level+i-1]!=1&&r[n+i-level]!=1)
            {
                row[i] = l[level+i-1] = r[n+i-level] = 1;
                solve8queen(level+1, n,row,l,r,c);
                row[i] = l[level+i-1] = r[n+i-level] = 0;
            }
            i++;
        }
    }
    else
    {
        (*c)++;
    }
}
int totalNQueens(int n) {
    int row[n+1];
    int l[2*n];
    int r[2*n];
    int c=0;
    solve8queen(1,n,row,l,r,&c);
    return c;
}

int
main(int ac, char *av[])
{
  printf("totally: %d solutions\n", totalNQueens(atoi(av[1])));
  return 0;
}

@corehello
Copy link
Author

Actually, we can use bit to represent the row, l, r, rt, but it is not straightforward. Bit operations are always cool techs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment