05-20 09:44
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

백준 9663 N Queen 백트래킹 문제 본문

카테고리 없음

백준 9663 N Queen 백트래킹 문제

벤치마킹 2019. 4. 28. 02:26

그냥 NxN 맵을 쭉 돌면서 visit 배열에 count  해주면서 체크 해주고 다음 퀸을 놓을수 있는 곳에 표시 하면서 백트래킹 해줌 

#include <stdio.h>
#include <iostream>
#include <memory.h>
using namespace std;
int N;
int dx[] = { 0, 1, 1, 1, 0, -1, -1, -1 };
int dy[] = { 1, 1, 0, -1, -1, -1, 0, 1 };
int ans = 0;
int visit[16][16] = { 0, };
void chk(int row, int col, int c){
visit[row][col] += c;
for (int i = 0; i < 8; i++){
int nx = col;
int ny = row;
while (1)
{
nx += dx[i];
ny += dy[i];
if (nx < 0 || nx > N - 1 || ny < 0 || ny > N - 1)
break;
visit[ny][nx] += c;
}
}
}
void solve(int row, int col){
if (row >= N - 1) {
ans++;
return;
}
for (int i = 0; i < N; i++){
if (visit[row + 1][i] == 0){
chk(row + 1, i, 1);
solve(row + 1, i);
chk(row + 1, i, -1);
}
}
}
int main() {
int ret;
freopen("input.txt", "r", stdin); setbuf(stdout, NULL);
cin >> N;
for (int i = 0; i < N; i++)
{
chk(0, i, 1);
solve(0, i);
chk(0, i, -1);
}
cout << ans << "\n";
return 0;
}


Comments