#pragma once
#include <cstdlib>
#include <cstdio>
#include <cstring>
typedef struct _NODE
{
int x;
int y;
}NODE;
void getQueenAddr(NODE* home, int index);
bool addrValid(NODE* point, NODE node, int index);
void show(NODE* points, int index);
#include "head.h"
#include <iostream>
void getQueenAddr(NODE* points, int index)
{
if (index == 8)
show(points, index);
if (index > 8)
return;
for (int ix = 0; ix < 8; ++ix)
{
NODE node = { index, ix };
if (addrValid(points, node, index))
{
memcpy(&(points[index]), &node, sizeof(NODE));
getQueenAddr(points, index + 1);
}
}
}
bool addrValid(NODE* points, NODE node, int index)
{
for (int ix = 0; ix < index; ++ix)
{
if (points[ix].y == node.y)
return false;
if ((node.y - points[ix].y) == (node.x - points[ix].x))
return false;
if ((node.x + node.y) == (points[ix].x + points[ix].y))
return false;
}
return true;
}
void show(NODE* points, int index)
{
static int count = 0;
count++;
printf("<%02d> || ", count);
for (int ix = 0; ix < index; ix++)
{
printf("[%d,%d] ", points[ix].x, points[ix].y);
}
printf("\n");
}
int main()
{
findQueens();
system("pause");
return 0;
}