반응형
https://www.acmicpc.net/problem/9663
#include <bits/stdc++.h>
using namespace std;
int N;
//i+j, i-j
bool arr[16], diagonal1[32], diagonal2[55];
int ans = 0;
void backTrack(int L) {
if (L == N) {
ans++;
return;
}
for (int i = 0; i < N; i++) {
if (!arr[i] && !diagonal1[L + i] && !diagonal2[L - i + N]) {
arr[i] = diagonal1[L + i] = diagonal2[L - i + N] = 1;
backTrack(L + 1);
arr[i] = diagonal1[L + i] = diagonal2[L - i + N] = 0;
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
backTrack(0);
cout << ans << '\n';
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 5052번 : 전화번호 목록 - 트라이, JAVA (0) | 2022.12.30 |
---|---|
백준 2463번 : 비용 - Union & Find (0) | 2022.12.14 |
백준 1944번 : 복제로봇 - BFS & Kruskal (0) | 2022.12.12 |
백준 1185번 : 유럽 여행 - MST, Kruskal (0) | 2022.12.12 |
백준 1097번 : 마법의 문자열 - KMP (0) | 2022.12.11 |