ciao a tutti, ho scritto questo codice dove calcola il numero massimo di combinazioni delle 8 regine, solo che mi da errore di segmentazione.
Ci vuole una condizione di chiusura della funzione queen o c'è un errore nella funzione verifica?
Mi potreste dare anche qualche dritta nel rendere il codice + efficiente.
Questo è il codice
codice:#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; }

Rispondi quotando