Vediamo....
ci sono delle regole per le giornate in questione?
Sarai d'accordo con me che la regola principale è che la i-esima squadra non può affrontare se stessa.
In secondo luogo bisogna verificare che tutte le squadre si siano affrontate almeno una volta prima che si riaffrontino, quindi un'altro controllo.
Non più di una squadra deve affrontarne un'altra ( non è così banale ).
Poi che altro?
Hai qualche altro vincolo ( al momento non mi viene in mente nulla ).

Di seguito genero un'assegnazione casuale, stile urna, però lo metto in forma testuale e non codice, in quando non voglio confonderti le idee con nomi di variabili:

Allora, prendo una squadra ( la prima ), poi genero un numero casuale da 1 a n ( n squadre ) e lo riterro valido se il numero sarà diverso dall'indice della mia squadra e se non sarà pari a nessuna squadra già incontrata. ( una lista magari recuperata da un db che mi salva gli incontri fatti sino ad ora ).
Fatto questo ho il mio primo incontro, gli identificativi delle mie squadre diventano un vincolo ( per evitare che x squadre debbano nella stessa giornata affrontare la stessa ), che posso salvare in un vettore che indicherà le squadre già assegnate ( come se si rimuovesse la pallina dall'urna ).
Fatto questo si procede con la seconda squadra.

Ok?