카테고리 없음
백준 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;}