Aiutooo sto impazzendo....
Sto scrivendo un programma che riesca a risolvere il gioco delle 8 regine, quello dove su una scacchiera si devono posizionare otto regina in modo tale che nessuna mangi le altre...e visto che scervellandomi su carta nn ci riuscivo, sono passato al programma![]()
Ma sono arrivato ad un inceppo: praticamente io per mettere una regina (che indico con un valore pari a 10) vedo se sulla riga, la colonna e le diagonali sulle quali essa si trova c'è già un'altra regina, e ogni controllo lo esprimo tramite una funzione che richiamo in una condizione, ma nn riesco proprio a capire come gestire le diagonali di qualsiasi elemento della matrice...ho notato però che se gli indici sono per esempio, 5 e 4, dove 5 è l'indice delle righe e 4 delle colonne, la diagonale "principale" dell'elemento parte dalla riga 5-4 cioè 1...ma poi nada de nada...questo è il mio prog:
dove ci sono i punti interrogativi è dove nn so che scrivere....codice:#include <stdio.h> #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <time.h> #include <conio.c> //dichiaro la matrice 8X8 per la scacchiera const int n=8; int sc[n][n]; void generazione_scacchiera (void); void regina(void); int criga(int); int ccolonna(int); int cdp(int,int); int cds(int,int); void visualizzazione(void); int main(){ generazione_scacchiera(); regina(); visualizzazione(); return 0; } void generazione_scacchiera(void){ int i, j; for(i=0;i<=n-1;i++) for(j=0;j<=n-1;j++) if((i%2)==0){ if((j%2)==0) sc[i][j]=0; else sc[i][j]=1; } else{ if((j%2)==0) sc[i][j]=1; else sc[i][j]=0; } } void regina(void){ int i, j; i=(rand()%8); j=(rand()%8); if( (criga(i)!=1) && (ccolonna(j)!=1) && (cdp()!=1) && (cds()!=1) ) sc[i][j]=10; else regina(); } int criga(int x){ int i; for(i=0;i<=n-1;i++) if(sc[x][j]==10) return 2; if(i==8) return 1; } int ccolonna(int x){ int i; for(i=0;i<=n-1;i++) if(sc[i][x]==10) return 2; if(i==8) return 1; } int cdp(int x,int y){ ???????? } int cds(int x,int y){ ???????? } void visualizzazione (void){ int i, j; for(i=0;i<=7;i++){ gotoxy(17,1+(i*3)); cout<<"_______________________________________________"; gotoxy(16,2+(i*3)); cout<<"| | | | | | | | |"; gotoxy(16,3+(i*3)); cout<<"| | | | | | | | |"; gotoxy(17,4+(i*3)); cout<<"-----------------------------------------------"; } for(i=0;i<=n-1;i++){ for(j=0;j<=n-1;j++){ if(sc[i][j]==1) cout<<"N "; if(sc[i][j]==0) cout<<"- "; if(sc[i][j]==10) cout<<"R "; } } getch(); }

Rispondi quotando