반응형
https://www.acmicpc.net/problem/9663
백트래킹 문제였습니다. 행을 기준으로 각 열에서 퀸이 놓일 수 있는 자리를 체크하고 dfs하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
#include <cmath>
using namespace std;
int n;
int board[16];
int ans;
//행을 기준으로 열과 대각선을 확인
int check(int tuple) {
for (int col = 0; col < tuple; col++)
{
if (board[tuple] == board[col] || abs(board[tuple] - board[col]) == tuple - col )
return false;
}
return true;
}
void dfs(int tuple) {
if (tuple == n)
ans += 1;
else
{
for (int col = 0; col < n; col++)
{
board[tuple] = col;
if (check(tuple))
dfs(tuple +1);
}
}
}
int main() {
cin >> n;
dfs(0);
cout << ans << '\n';
}
|
'Algorithm > DFS' 카테고리의 다른 글
(C++) - 백준(BOJ) 2210번 : 숫자판 점프 답 (0) | 2020.02.05 |
---|---|
(C++) - 백준(BOJ) 1987번 : 알파벳 답 (0) | 2020.02.04 |
(C++) - 백준(BOJ) 1039번 : 교환 (0) | 2020.01.16 |
(C++) - 백준(BOJ) 1182번 : 부분수열의 합 (0) | 2020.01.15 |
(C++) - DFS 유형 (0) | 2020.01.15 |