본문 바로가기
이것저것

nqueen 알고리즘

by 문자메일 2017. 10. 31.

#include <stdio.h>

#include <math.h>


int queenArr[16];

int N;

int cnt = 0;


int promising(int level){


for (int i = 1; i < level; i++){

//이전에 놓인 퀸과 같은 열에 있을 경우

if (queenArr[i] == queenArr[level])

return 0;

//이전에 놓인 퀸과 같은 대각선에 있을 경우

if (abs(i - level) == abs(queenArr[i] - queenArr[level]))

return 0;

}

return 1;

}


void queen(int level)

{

if (!promising(level)){ //promising 하지 않는다면 종료

return;

}

else if (N == level){//queen을 N개 전부 넣었다면

cnt++;

//퀸이 놓인 위치 출력

for (int i = 1; i <= N; i++){

printf(" %d", queenArr[i]);

}

printf("\n");

}

else{//모든 행에 퀸을 놓는다.

for (int i = 1; i <= N; i++){

queenArr[level + 1] = i;

queen(level + 1);

}

}

}


int main()

{


printf("N : ");

scanf("%d", &N);

queen(0);

printf("%d : %d\n", N, cnt);


return 0;

}

'이것저것' 카테고리의 다른 글

visual studio에서 단어 일괄적으로 바꾸는 단축키  (0) 2017.12.17
미로찾기 문제 소스  (0) 2017.10.31
백준 14499번 주사위굴리기  (0) 2017.10.18
c++ topological sort  (0) 2017.10.05
c언어 dfs bfs 코드  (0) 2017.09.30

댓글