ten_queens
[알고리즘] 백트래킹(Backtracking) | C언어 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);
}