il testo del progetto è questo (link) :
http://uva.onlinejudge.org/index.php...em&problem=323
Questo è quello ke ho fatto io!.. ora mi manca solo la tecnica del backtracking
ke nn so come si faccia..perchè in questo modo appena mi da un pezzo io l ho metto
però se nn li mette bene i pezzi magari da ke nn è soluzione..quindi deve tornare indietro
e mettere i pezzi in modo diverso!...
codice:#include <iostream> using namespace std; const int d=5; int board[d][d]={0}; struct pezzo { int r; int c; int M[4][4]; }; pezzo p[5]; void inizializzaPezzo(int nPezzo) { for(int i=0;i<p[nPezzo].r;i++) { for(int j=0;j<p[nPezzo].c;j++) { p[nPezzo].M[i][j]=0; } } } void formaPezzo(int nPezzo) { int x,y,n; cout<<"Inserisci dimensione pezzo:"<<endl; cin>>x; cin>>y; p[nPezzo].r=x; p[nPezzo].c=y; for(int i=0;i<p[nPezzo].r;i++) { for(int j=0;j<p[nPezzo].c;j++) { cin>>n; p[nPezzo].M[i][j]=n; } } } void stampaPezzo(int nPezzo) { for(int i=0;i<p[nPezzo].r;i++) { for(int j=0;j<p[nPezzo].c;j++) { cout<<p[nPezzo].M[i][j]<<" "; } cout<<endl; } } bool puoEntrare(int x,int y,int nPezzo) { for(int i=x;i<x+p[nPezzo].r;i++) { for(int j=y;j<y+p[nPezzo].c;j++) { if(p[nPezzo].M[i-x][j-y]!=0 && board[i][j]!=0) { return false; } } } return true; } void aggiungiPezzo(int x,int y,int nPezzo) { for(int i=x;i<x+p[nPezzo].r;i++) { for(int j=y;j<y+p[nPezzo].c;j++) { if(p[nPezzo].M[i-x][j-y] !=0) board[i][j]=p[nPezzo].M[i-x][j-y]; } } } void manovraAggiungi(int nPezzo) { for(int i=0;i<d;i++) { for(int j=0;j<d;j++) { if(puoEntrare(i,j,nPezzo)) { aggiungiPezzo(i,j,nPezzo); return; } } } } void stampaBoard() { cout<<endl; for(int i=0;i<d;i++) { for(int j=0;j<d;j++) { cout<<board[i][j]<<" "; } cout<<endl; } } bool controllaSoluzione() { for(int i=0;i<d;i++) { for(int j=0;j<d;j++) { if(M[i][j]==0) return false; } } return true; } int main() { int nPezzo=0; while(nPezzo <= 4) { inizializzaPezzo(nPezzo); formaPezzo(nPezzo); stampaPezzo(nPezzo); nPezzo++; } nPezzo=0; while(nPezzo <= 4) { manovraAggiungi(nPezzo); nPezzo++; } if(!controllaSoluzione()) cout<<"non esistono soluzioni possibili"<<endl; else cout<<"Soluzione: "<<endl; stampaBoard(); return 0; }

Rispondi quotando