Codice: Seleziona tutto
#include <stdio.h>
#include <stdint.h>
uint8_t tab[5][7];
const uint8_t max[][2] = {{4, 6}, {4, 4}};
uint16_t comb = 0;
void foo()
{
static uint8_t pos[][2] = {{0, 2}, {0, 0}}, moves_left = 8;
uint8_t i, j;
if(!moves_left)
{
comb++;
}
else{
tab[pos[0][0]][pos[0][1]] = 1;
for(i = 0; i < 2; i++)
{
if(pos[0][i] != max[0][i])
{
for(j = 0; j < 2; j++)
{
if(pos[1][j] != max[1][j] && !tab[pos[1][0]][pos[1][1]])
{
pos[0][i]++;
pos[1][j]++;
moves_left--;
foo();
pos[0][i]--;
pos[1][j]--;
moves_left++;
}
}
}
}
tab[pos[0][0]][pos[0][1]] = 0;
}
}
int main()
{
uint8_t i, j;
for(i = 0; i < 5; i++)
for(j = 0; j < 7; j++)
tab[i][j] = 0;
foo();
printf("%u\n", comb);
return 0;
}
Grazie e buona serata
Edit:
dò per letto il testo del problema e aggiungo qualche informazione sul mio programma: la tabella corrisponde alle sedie, l'1 vuol dire che la sedia è stata occupata da Paura, 0 che non lo è stata. Il programma utilizza una funzione ricorsiva che, dopo aver controllato che il gioco non sia terminato, crea al massimo 4 situazioni (2 movimenti di Paura * 2 di Disgusto).
Le soluzioni:
Spoiler
Mostra
1750 quella ufficiale
1925 dal mio programma
1925 dal mio programma
