usingnamespacestd; bool check[15][15]; int n; int ans = 0;
boolpossible(int x, int y)// (x, y)에 퀸을 놓을 수 있는지 판별하는 함수 { for (int i = x - 1, j = 1; i >= 0; i--, j++) { if (check[i][y]) returnfalse; // 같은 열에 놓인 퀸이 있는지 확인 if (y - j >= 0 && check[i][y - j]) returnfalse; // 좌측 위 대각선 확인 if (y + j < n && check[i][y + j]) returnfalse; // 우측 위 대각선 확인 } returntrue; }
voidgo(int row) { if (row == n) // 놓을 수 있는 경우 { ans++; return; }
for (int col = 0; col < n; col++) { if (possible(row, col)) // 현재 (row, col)에 퀸을 놓을 수 있는지 확인 { check[row][col] = true; // 놓은 것을 표시 go(row + 1); check[row][col] = false; } } }