๋ฐ์ํ
https://www.acmicpc.net/problem/9663
๋ฌธ์
N-Queen ๋ฌธ์ ๋ ํฌ๊ธฐ๊ฐ N × N์ธ ์ฒด์คํ ์์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๋ฌธ์ ์ด๋ค.
N์ด ์ฃผ์ด์ก์ ๋, ํธ์ ๋๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N < 15)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํธ N๊ฐ๋ฅผ ์๋ก ๊ณต๊ฒฉํ ์ ์๊ฒ ๋๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
์ขํ๋ฅผ (r,c) ๋ผ๊ณ ๋๋ค.
col[x] : x๋ฒ์งธ ์ด์ ํธ์ ์ฌ๋ถ
increase[x] : i+k=x ์ธ ์ฐ์ํฅ ๋๊ฐ์ ์ ํธ์ ์ฌ๋ถ
decrease[x] : i-k+(n-1) = x ์ธ ์ฐํํฅ ๋๊ฐ์ ์ ํธ์ ์ฌ๋ถ
(์ด๋ ์ธ๋ฑ์ค๊ฐ ์์๊ฐ ๋๋ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด n-1์ ๋ํ๋ค)
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
int n, ans;
bool col[15];
bool increase[30];
bool decrease[30];
void recur(int r) {
if(r == n) {
ans++;
return;
}
for(int c=0; c<n; c++) {
if(col[c] || increase[r+c] || decrease[n+r-c])
continue;
col[c] = increase[r+c] = decrease[n+r-c] = true;
recur(r+1);
col[c] = increase[r+c] = decrease[n+r-c] = false;
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin >> n;
recur(0);
cout << ans;
return 0;
}
/*
*/
๋ฐ์ํ
'๐ Baaaaaarking > 0x0C๊ฐ - ๋ฐฑํธ๋ํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S3][C++] ๋ฐฑ์ค 15654๋ฒ : N๊ณผ M (5) (0) | 2022.07.12 |
---|---|
[BOJ S3][C++] ๋ฐฑ์ค 15652๋ฒ : N๊ณผ M (4) (0) | 2022.07.12 |
[BOJ S3][C++] ๋ฐฑ์ค 15651๋ฒ : N๊ณผ M (3) (0) | 2022.07.09 |
[BOJ S2][C++] ๋ฐฑ์ค 1182๋ฒ: ๋ถ๋ถ์์ด์ ํฉ (58%) (0) | 2022.07.07 |
[BOJ S3][C++] ๋ฐฑ์ค 15649๋ฒ: N๊ณผ M (1) (0) | 2022.07.05 |