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:
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();
}
dove ci sono i punti interrogativi è dove nn so che scrivere....