Ciao!
vai di forza bruta:
per prima cosa scrivi una funzione che genera una giornata. creaGiornata()
poi scrivi una funzione che è in grado di dire se il campionato è in uno stato corretto, cioè se, per tutte le giornate già definite, non ci sono partite che si ripetono. testaStato()
dopo di che crea una funzione ricorsiva per generare il campionato.
crea inoltre una funzione che controlli se per una strada ho già seguito tutte le combinazioni possibili ed un'altra che esegua il rollback di un'operazione che ha condotto il campionato in uno stato scorretto.
codice:
struct campionato{
una struttura in grado di contenere un campionato
}
generaCampionato(&campionato){
if (testaStato(campionato)==COMPLETO){
return;
else if (testaStato(campionato)==INCOMPLETO){
do{
giornata=creaGiornata();
aggiungi (giornata,campionato);
generaCampionato(&campionato);
while ((testaStato(campionato)!=CORRETTO)&&(combinazioniFinite()==FALSE))
}
else if (testaStato(campionato)==NON_CORRETTO){
rollback();
return;
}
}
}
Questo algoritmo fa uso della forza bruta ed è lentissimo.
In attesa che mi venga in mente qualche metodo un po' più euristico ti passo questo :-)
ciao!