J'ai résolu le problème N-Queen avec la condition qu'il ne peut y avoir qu'un seul reine par colonne. Donc, je place une reine dans un carré dans la première colonne, puis déplacez-vous sur la colonne suivante et placez une reine dans un carré non attaqué par la reine à bord. Je suis capable de trouver toutes les solutions avec cette approche mais cela commence à prendre du temps après n = 13. J'ai également trouvé que la plupart des solutions du problème peuvent être trouvées par des rotations et des réflexions de très peu de solutions distinctes. Par exemple, le problème de 8 reines a 92 solutions totales dont seulement 12 sont distinctes. (http://en.wikipedia.org/wiki/Eight_queens_puzzle)Interrogez-vous sur N-Queen?
Donc, ma question est comment puis-je vérifier pour ces états de la carte et seulement pousser ces états sur la pile qui donnent une solution distincte?
C'est ce que je suis en train de faire.
typedef struct state{
int board[N][N];
int col;
}state;
state cur;
state next;
stack<state> myS;
myS.push(emptyBoard);
while(!myS.empty()){
cur=myS.top(); myS.pop();
if(cur.col==n){
count++;
continue;
}
for(i=0;i<n;i++){
next=cur;
if(cur.board[i][cur.col]==available){
next.board[i][cur.col]=occupied;
markConflicts(i,cur.col); //mark squares attacked by queen as conflicted
next.col=cur.col+1;
myS.push(next);
}
}
}