문제출처: https://www.acmicpc.net/problem/9663



구글에 백트래킹 검색해보시면 가장먼저 나오는게 n-queen 문제입니다.

기본적인 이해와 재귀호출을 정확히 이해해야하므로 학습하시고 올 것을 추천드립니다.

백트래킹의 대표적인 문제라서, 학습하시면 많은 소스코드들이있으니 풀이는 따로 적지않겠습니다.


코드

#include<iostream>
using namespace std;
int col[15];
int n, cnt;
void N_queen(int pos);
bool promising(int pos);
int main()
{
	cin.tie(0);
	cin.sync_with_stdio(false);
	cin >> n;
	N_queen(0);
	cout << cnt << '\n';
}
void N_queen(int pos)
{
	if (pos == n)
		cnt += 1;
	else
	{
		for (int i = 0; i < n; i++)
		{
			col[pos] = i;
			if (promising(pos))
				N_queen(pos + 1);
		}
	}
}
bool promising(int pos)
{
	for (int i = 0; i < pos; i++)
	{
		if (col[pos] == col[i] || abs(col[i] - col[pos]) == pos - i)
			return false;
	}
	return true;
}


결과

'문제풀이(BOJ) > 백트래킹' 카테고리의 다른 글

[백준 1182] 부분수열의 합  (0) 2020.02.09
[백준 6603] 로또  (0) 2020.02.05
[백준 14888] 연산자 끼워넣기  (0) 2020.01.20

+ Recent posts