8Bit Version
~cpp
#include <stdio.h>
#define MASK 0x01
unsigned char rmap[8], map[8] = {0,0,0,0,0,0,0,0};
void result(void)
{
int i = 0;
for (printf("\nResult: "); i < 8 ; printf("[%2x] ", rmap[i++]));
}
int mask(unsigned char * tmap , register int x, register int y)
{
register int i;
if(map[y] & MASK << x) return 0;
memcpy(tmap, map, 8);
rmap[y] = MASK << x;
map[y] |= 0xff;
for (i = 0;i < 8;i++)
map[i] |= (MASK << x) | (MASK << (x - y + i)) | (MASK << (x + y - i));
return 1;
}
void checkQueen(int depth)
{
int i;
unsigned char tmap[8];
for( i = 0;i < 8 && depth < 8;i++) {
if(mask(tmap, i, depth)) {
if((depth + 1) == 8) result();
checkQueen(depth + 1);
memcpy(map, tmap, 8);
}
}
}
int main()
{
checkQueen(0);
return 0;
}