1번문제를 제대로 이해 못해서 실수로 모든 경우를 구해버렸습니다. -0-;;;
~cpp
#include <iostream>
class ChessBoard
{
char m_cells[8][8];
public:
ChessBoard()
{
for (int i=0; i<8; ++i)
for (int j=0; j<8; ++j)
m_cells[i][j] = 0;
}
void applyQueen(int x, int y)
{
for (int i=0; i<8; ++i)
for (int j=0; j<8; ++j)
{
if (i==x | j==y | (y-j)==(x-i) | (y-j)==-(x-i))
m_cells[i][j] = -1;
}
m_cells[x][y] = 1;
}
bool isEmptyCell(int x, int y)
{
return (m_cells[x][y] == 0);
}
void display()
{
for (int i=0; i<8; ++i)
{
for (int j=0; j<8; ++j)
{
if (m_cells[i][j] == 1)
std::cout << " O";
else if (m_cells[i][j] == -1)
std::cout << " X";
else
std::cout << " ";
}
std::cout << std::endl;
}
std::cout << std::endl;
}
};
void applyCell(ChessBoard cboard, int x, int y);
void find8Queen(ChessBoard& cboard, int y)
{
if (y >= 8)
{
cboard.display();
return;
}
for (int x=0; x<8; ++x)
if ( cboard.isEmptyCell(x, y) )
applyCell(cboard, x, y);
}
void applyCell(ChessBoard cboard, int x, int y)
{
cboard.applyQueen(x, y);
find8Queen(cboard, y+1);
}
int main()
{
ChessBoard cboard;
find8Queen(cboard, 0);
return 0;
}