백 트랙을 사용하여 N 개의 퀸즈 문제에 대한 솔루션을 구현했습니다. 나는 모든 왼쪽 여왕의 위치가 안전한지 여부를 확인하고 있는데, 왼쪽 위, 오른쪽 위, 위쪽을 확인한 다음 그것을 행에 배치합니다. 그렇지 않으면 되돌아갑니다.백 트랙을 사용하는 N 개의 퀸
여기에는 내가 놓친 거지 모르는
6으로, 다른 사람을 위해 같은 4, 8로 N의 일부 값에 대한 정확한 솔루션을 제공하지만, 올바르지 않습니다. 어떤 도움을 주시면 감사하겠습니다. 여기
코드입니다 :int S;
static int cnt=0;
int safepos(int board[][S+1],int i,int j)
{
if(i==1)
return 1;
int a,b;
a=i-1;
b=j-1;
//checking for top-left side
while(a>0 && b>0)
{
if(board[a--][b--]==1)
return 0;
}
a=i-1;
b=j+1;
//checking for top-right side
while(a>0 && b<=S)
{
if(board[a--][b++]==1)
return 0;
}
//checking for the same column
for(a=1;a<i;a++)
if(board[a][j]==1)
return 0;
return 1;
}
void Nqueens(int board[][S+1],int N,int n) //n is the number of the rows
{
if(n==N+1) //for those which reaches the last position we will have a solution
{
cnt++;
return;
}
int i;
for(i=1;i<=N;i++) //for every column
{
if(safepos(board,n,i))
{
board[n][i]=1;
Nqueens(board,N,n+1); //checking for next row
}
board[n][i]=0;
}
}
int main()
{
int N=6;
S=N;
int board[N+1][N+1];
Nqueens(board,N,1);
printf("%d",cnt);
return 0;
}
도움을 주셔서 감사합니다. – Luv