24/05/11 19:23
belledetta
sto scrivendo il codice per avere una soluzione al problema delle 8 regine
it.wikipedia.org/wiki/…
per dimensione uguale a 5 il codice funziona bene perchè non è necessario eliminare ricorsivamente le regine poste male per avanzare la cella in cui posizionarla bene.
Potete aiutarmi a scrivere questa parte e capire come ragionare?? non riesco a capire come impostare l'algoritmo
it.wikipedia.org/wiki/…
per dimensione uguale a 5 il codice funziona bene perchè non è necessario eliminare ricorsivamente le regine poste male per avanzare la cella in cui posizionarla bene.
Potete aiutarmi a scrivere questa parte e capire come ragionare?? non riesco a capire come impostare l'algoritmo
#include <stdio.h> #include <stdbool.h> #define N 8 bool riga[N]; //true= attaccata, false= non attaccata bool diag1[2*N-1]; bool diag2[2*N-1]; int colonna[N]; //colonna[j]=i posizione(i,j) void verifica(int j) { int i=0; for (; i<N; i++) { //per ogni cella della colonna if ( (riga[i]==false) && (diag1[i+j]==false) && (diag2[i-j+N-1]==false) ){ //Se la cella non è attaccata colonna[j] = i; //metti regina nella cella(i,j) riga[i] = true; // riga i-ma attaccata diag1[i+j] = true; diag2[i-j+N-1] = true; if (j < N-1) verifica(j+1); else return; } } //elimina ultima regina piazzata e avanza cella riga[i] = false; diag1[i+j] = false; diag2[i+j+N-1] = false; } void visualizza(void) { char scacc[N][N]; //inizializza la scacchiera a 0 for (int i = 0; i<N; i++) for(int j = 0; j<N; j++) scacc[i][j] = '-'; //inserisci regine for (int i = 0; i<N; i++){ int l = colonna[i]; scacc[i][l] = '#'; } //stampa scacchiera for (int i = 0; i<N; i++){ for (int j = 0; j<N; j++) printf("%3c", scacc[i][j]); printf("\n"); } return; } int main() { /*inizializza i vettori*/ for(int i=0; i<N; riga[i++]=false); for(int i=0; i<2*N-1; diag1[i++]=false); for(int i=0; i<2*N-1; diag2[i++]=false); for(int i=0; i<N; colonna[i++]=-1); verifica(0); //verifica colonna a partire dalla colonna 0 visualizza(); // visualizza configurazione scacchiera return 0; }
aaa