티스토리 뷰

백준

백준 소스코드 [C++] 9663 N-Queen

Hani_Levenshtein 2020. 12. 19. 20:49

www.acmicpc.net/problem/9663

 

9663번: N-Queen

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

www.acmicpc.net

백준 소스코드 [C++] 9663 N-Queen

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
typedef long long ll;
using namespace std;
#define all(v) v.begin(),v.end()
int n;
bool chk_x[15],chk_y[15],chk_dia1[31], chk_dia2[31];

int res = 0;
void dfs(int i) {
	if (i == n) {
		res++; return;
	}
	for(int j=0;j<n;j++)
		if (chk_x[j]==false && chk_y[i]==false && chk_dia1[i+j]==false &&chk_dia2[i-j+15] == false) {
			chk_x[j] = true, chk_y[i] = true, chk_dia1[i + j] =true, chk_dia2[i - j+15] = true;
			dfs(i + 1);
			chk_x[j] = false, chk_y[i] = false,chk_dia1[i + j] = false, chk_dia2[i - j + 15] = false;
		}
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	dfs(0);
	cout << res;
	return 0;
}
댓글