백준

백준 9663번(Gold 4)

이야기prog 2023. 9. 16. 00:23

이번 포스팅은 9663번 Backtracking입니다.

아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.https://www.acmicpc.net/problem/9663

 

 

9663번: N-Queen

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.

N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.

#include <iostream>
#include <vector>

void Dfs(std::vector<int> &tmp, int idx);
bool promising(std::vector<int>& tmp, int idx);
int result = 0;
int main() {
	int N;
	std::cin >> N;
	std::vector<int> tmp(N, 0);
	Dfs(tmp, 0);
	std::cout << result;
	return 0;
}
bool promising(std::vector<int>& tmp, int idx) {
	for (int i = 0; i < idx; ++i) {
		if (tmp[i] == tmp[idx] || idx - i == abs(tmp[idx] - tmp[i]))
			return false;
	}
	return true;
}
void Dfs(std::vector<int> &tmp, int idx) {
	int N = tmp.size();
	if (idx == N) {
		result++;
		return;
	}
	for (int i = 0; i < N; ++i) {
		tmp[idx] = i;
		if (promising(tmp, idx)) {
			Dfs(tmp, idx + 1);
		}
	}
}

'백준' 카테고리의 다른 글

백준 15686번(Gold 4)  (1) 2023.10.13
백준 2015번(Gold 4)  (0) 2023.10.05
백준 2960번(Silver 4)  (1) 2023.10.05
백준 2003번(Silver 4)  (0) 2023.09.18
백준 1260번(Silver 2)  (0) 2023.09.12