Ciao a tutti, ho scritto questo codice dove calcola il numero massimo di combinazioni delle 8 regine, solo che mi da errore di segmentazione, dove ho sbagliato.
DDD mi da un errore sulla funzione verifica, ma non riesco a capire.
#include <stdio.h>
int board[8][8] = {{0}};
int verifica(int,int);
int clear(int);
int queen(int, int, int);
int main() {
printf("%d\n", queen(0, 0, 0));
return 0;
}
int queen( int riga, int col, int WINS) {
if (riga == 0 && col > 7)
return WINS;
else {
for (int i = col; i < 8; i += 1) {
if(verifica( riga, i)){
board[riga][i] = 1;
if(riga == 7) {
++WINS;
break;
}
queen(++riga, 0, WINS);
}
}
--riga;
queen (riga, clear(riga), WINS);
}
}
int verifica( int X, int Y) {
for (int i = 0; i <= X; i += 1) {
if (board[X - i][Y])
return 0;
if(Y - i >= 0 && board[X - i][Y - i])
return 0;
if(Y + i <= 7 && board[X - i][Y + i])
return 0;
}
return 1;
}
int clear( int row) {
for (int i = 0; i < 8; i += 1) {
if (board[row][i]) {
board[row][i] = 0;
return i + 1;
}
}
return 0;
}