https://www.acmicpc.net/problem/9663
수도 코드
func (int i) { // i번째 행에 퀸을 둘 차례 (i: 0 ~ N-1)
if (i == M)
answer++; return;
for(j: 0 ~ N-1) {
if (열, 우상향 대각선, 좌상향 대각선에 없을 때)
isused 표시
func(i+1(
isused 표시했던 거 되돌리기
}
}
코드
/*boj g4 9663 N-Queen*/
#include <iostream>
#define MAXN 16
using namespace std;
int N;
bool isused1[MAXN];
bool isused2[2 * MAXN];
bool isused3[2 * MAXN];
int answer;
void func(int i) { // i번째 행을 정해야 함 (i: 0~ N-1)
if (i == N) {
answer++;
return;
}
for (int j = 0; j < N; j++) {
if (isused1[j]) continue;
if (isused2[i + j]) continue;
if (isused3[i - j + N - 1]) continue;
isused1[j] = 1;
isused2[i + j] = 1;
isused3[i - j + N - 1] = 1;
func(i + 1);
isused1[j] = 0;
isused2[i + j] = 0;
isused3[i - j + N - 1] = 0;
}
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
func(0);
cout << answer << "\n";
}
'알고리즘' 카테고리의 다른 글
백준 s3 15650 N과 M (2) c++ (0) | 2024.01.15 |
---|---|
백준 s2 1182 부분수열의 합 c++ (0) | 2024.01.15 |
백준 s3 15649 N과 M (1) c++ (0) | 2024.01.15 |
백준 g5 2448 별 찍기 - 11 c++ (0) | 2024.01.13 |
백준 2447 g5 별 찍기 - 10 c++ (0) | 2024.01.13 |