#include
#include
#include<conio.h>
#include<Windows.h>
using namespace std;
class Queen
{public: short x; short y;
Queen(short _x = 0, short _y = 0) :x(_x), y(_y) {}; bool Attack(Queen& queen)
{ return x == queen.x || y == queen.y || x - y == queen.x - queen.y || x + y == queen.x + queen.y;
}
};
void PrintQueens(vector v)
{ short i, j;
cout << "输出八皇后摆法\n";
vector::iterator itr = v.begin();
for (i = 0; i < 8; i++)
{ for(j=0;j<8;j++)
if (i == itr->y && j == itr->x)
{ cout << "黄";
itr++;
}
else
{
cout << "□"; }
cout << endl; }}
int main(){
vector vt;
short i,j;
vector::iterator it;
Queen *q;
for (i = 0; i < 8; i++)
{
j = 0;
Repeat: for (; j < 8; j++)
{
q = new Queen(j, i);
for (it = vt.begin(); it != vt.end(); it++)
{
if (q->Attack(*it))
{
delete q;
break;
}
}
if (it == vt.end())
{
vt.push_back(*q);
delete q;
if (vt.size() == 8)
{
PrintQueens(vt);
j = 8;
}
break;
}
}
if (j == 8)
{
if (vt.back().x == 7) vt.pop_back();
i = vt.back().y;
j = vt.back().x+1;
vt.pop_back();
goto Repeat;
}
}
return 0;
}