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;
}