ten_queens

[알고리즘] 백트래킹(Backtracking) | C언어 N-Queen구현

[C언어] 백준 9663 : N-Queen

참고 코드

#include <stdio.h>

int vx[16], vy[16]; // 배열 선언

int ft_abs(int a, int b) // 절대값 구하기
{
    if (a - b >= 0)
        return a - b;
    else
        return (a - b) * (-1);
}

int n_queen(int x, int y, int n)
{
    int i;
    i = 0;
    while (i < y) // i가 y보다 작을 때 동안
    {
        if (y == vy[i]) // 만약 y가 vy[i]와 같으면...가지치기
            return 0; // 0 리턴
        if (x == vx[i]) // x가 vx[i]와 같으면...가지치기
            return 0; // 0 리턴
        if (ft_abs(x, vx[i]) == ft_abs(y, vy[i])) // x-vx[i], y-vy[i]가 같으면 가지치기
            return 0; //0 리턴
        i++;
    }
    if (y == n - 1) // y가 n-1이랑 같아지면
        return 1; // 1을 리턴
    vx[y] = x; 
    vy[y] = y; 
    int count = 0;
    i = 0;
    while (i < n)
    {
        count = count + n_queen(i, y + 1, n);
        i++;
    }
    return count;
}

int main() {
    int i;
    int n = 10;
    int count = 0;
    //scanf("%d", &n);
    i = 0;
    while (i < n)
    {
        count = count + n_queen(i, 0, n);
        i++;
    }
    printf("%d", count);
}