728x90
https://www.acmicpc.net/problem/9663
재귀함수 문제이다.
맨 처음에 자료구조였나,, 이문제를 들었던 적이 있는데
그때는 나한테 너무나도 어렵게 느껴졌었는데
지금은 어떻게 풀어야하는 아이디어가 대략 있으니까 어렵지 않게 구현한 것 같다.
col[i] 는 우선 i번째 열의 행 값이다.(위에서부터 몇번째 행에 있는지)
1열부터 해서 값을 설정한 다음에, 그 다음열부터 이전 열들에 위치한 행값을 비교하면서 N번째까지 갔을 경우 1증가,
아닐시 false를 반환하고 끝내면 된다.
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
|
#include <iostream>
using namespace std;
int N;
int result=0;
int col[15];
bool ispossible(int i){
for(int j=0; j<i; j++) {
if (col[i] == col[j] || i - j == abs(col[i] - col[j]))
return false;
}
return true;
}
void nqueen(int i){
if(i==N)
result++;
else{
for(int j=0; j<N; j++){
col[i]=j;
if(ispossible(i)){
nqueen(i+1);
}
}
}
}
int main(void){
cin>>N;
nqueen(0);
cout<<result<<" ";
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 2805 나무자르기 - 이분탐색 C++ (미완) (0) | 2020.01.22 |
---|---|
백준 1654 랜선자르기(이분탐색)-C++ (0) | 2020.01.22 |
백준 9012 괄호 (문자열)- C++ (0) | 2020.01.20 |
백준 1931 회의실 배정-greedy algorithm(C++) (0) | 2020.01.15 |
백준 10610 30 (greedy) - C++ (0) | 2020.01.14 |