2011-02-03 4 views
3

어떻게 8/4 퀸즈 문제를 구현할 수 있습니까? DFS/BFS를 사용해야할까요? DF가 더 좋을 것 같습니다. 어떤 의사 코드/안내선을 줄 수 있습니까?8 퀸즈 문제

+0

취향은 숙제를 좋아합니다. – gabuzo

+0

예, 과제 ftw! 숙제를하는 가장 좋은 방법은 실제로 스스로하는 것입니다. –

+1

BFS *는 여왕 문제에 대한 * 모든 * 해결책을 찾고 싶다면 재미있을 수 있습니다. 가능한 한 빨리 모든 솔루션을 찾으려면 DFS가 올바른 선택입니다. –

답변

2

스택 및 백 트랙킹을 사용하면 가장 쉬운 방법은 재귀를 통한 것입니다.

는 이러한 다른 SO 게시물을 참조 :

Dumb 8 Queens problem in C++

+0

예, 알고 있습니다 만, 의사 코드를 제공 할 수 있습니까? – akshay

+0

거기에 구현이 있습니다. 해결책을 찾았을 때 무엇이 ​​필요합니까? –

1

DFS 참으로 되돌아으로 구현해야하는 솔루션입니다.

해결책에 대한 설명은 here을 참조하십시오.

링크의 설명을 이해할 수 없다면 질문하십시오.

모두 최고입니다.

0

내 솔루션에는 2 개의 사전 정의 된 논리가 있으며 행에 여왕이 하나만 있으며 열에는 여왕이 하나뿐입니다. 길이가 8 인 1 차원 배열이 있습니다. 모든 배열 값은 0-7 중 하나를 설정하지만 모든 값은 정확히 한 번만 사용됩니다 (값 0-7의 순열) arr [0] = 5 값은 여왕을 의미합니다. 첫 번째 열의 열 6에서 arr [1] = 3 값은 두 번째 열에서 열 4의 여왕을 의미하며 은 배열 검사에서 교차 위반 값을 제어하기 때문에 검사 ​​행 또는 행 위반이 필요 없습니다. 당신이 필요로하는 순열과 교차 위반 함수들 (C++ STL은 순열 함수를가집니다.)

0

퀸즈가 (i, j)와 (k, l) 좌표에 있다면 각각을 공격 할 수 있습니다 다른 경우

  1. 제가 = K (동일한 행)
  2. J = L (동일한 컬럼)
  3. | IK | = | JL | (대각선 방향), | | saurabh 학교

    에서 참조

    공극 NQueens (K, N) {

    for(i=1 to n) 
    { 
    if(place(k,i)) //checking if queen can be placed at (k,i) 
    { 
    x[k]=i; 
    if(k==n) then write (x[1:n]); 
    else Nqueens(k+1,n); 
    } 
    } 
    } 
    

*

bool place(k,i) 
{ 
//returns true if the queen can be placed at k-th row and i-th column 
//x[] is a global array with first (k-1) values set already. 
//x[p]=q means a queen is at location (p,q) 

for(j=1 to k-1) 
{ 
if(x[j]==i)||(ABS(x[j]-i)==ABS(j-k))  //checking if another queen in same column or  diagonally 
return false; 
} 
return true; 
} 

는 역행을 사용하여 모든 가능한 게재 인쇄의 절대 값을 나타낸다