손영배 블로그 누구나 쉽게 이해하고 습득하기

N-Queen 본문

권오흠 교수님의 알고리즘

N-Queen

손영배 2020. 1. 14. 11:55
int [] cols = new int[N+1];

return type queens(int level){

    if(non-promissing(level))
    	report failure and return;
    else if(level == N)
    	report answer and return;
    else
    	visit children recursively;
}

 

  1. 현재 내가 도착한 노드한 꽝이라면(non-promissing())이면 - 실패
  2. 내가 도착한 노드가 최종적 답이라면 - 성공
  3. 다음 level에 내가 갈 수 있는 노드들을 가보자
int [] cols = new int[N+1];
boolean queens(int level) {

    if(!promising(level)
    	return false;
    else if (level == N)
    	return true;
     
    for(int i = 1; i <= N; i++){
    	cols[level+1] = i;
        if(queens(level+1))
            return true;
    }
    return false;
}

 

boolean promising(int level){

	for(int i = 1; i < level; i++){
    
    if(cols[i] == cols[level])
    	return false;
    else if (level - i == Math.abs(cols[level] - cols[i]) //같은 대각선에 놓였는지 검사
    	return false;
    }
    return true;
}

https://www.acmicpc.net/problem/9663

'권오흠 교수님의 알고리즘' 카테고리의 다른 글

트리 (Tree) 와 이진트리  (0) 2019.12.26