struct solution_partielle {
vec2* positions;
int prochain; // prochain à examiner
};
typedef struct solution_partielle solution_partielle;
solution_partielle solution_partielle_vide(inventaire* inv)
{
vec2* positions = malloc((inv->nb)*sizeof(vec2));
for(int i = 0 ; i < inv->nb ; i += 1)
{
positions[i].x = -1;
positions[i].y = -1;
}
solution_partielle res = {positions, 0};
return res;
}
bool ajoute(inventaire* inv, solution_partielle* sol, vec2 pos)
{
int n = inv->nb;
vec2 lim = ajouter(pos, inv->dimensions[n]);
if((lim.x > inv->grille.x) || (lim.x > inv->grille.x)){return false;}
for(int i = 0 ; i < n ; i += 1)
{
if((sol->positions[i].x != -1) && collision(pos, inv->dimensions[n], sol->positions[i], inv->dimensions[i]))
{
return false;
}
}
sol->positions[n] = pos;
sol->prochain = n+1;
return true;
}
void retire(solution_partielle* sol)
{
sol->positions[sol->prochain-1].x = -1;
sol->positions[sol->prochain-1].y = -1;
sol->prochain = sol->prochain-1;
}