Anche se la domanda è vecchia ecco un esempio in Java che usa l'algoritmo di Berger:
codice:
public void AlgoritmoDiBerger(ArrayList<String> ) {
String[] squadre = mTeams.toArray(new String[mTeams.size()]);
int numero_squadre = squadre.length;
int giornate = numero_squadre - 1;
/* crea gli array per le due liste in casa e fuori */
String[] casa = new String[numero_squadre / 2];
String[] trasferta = new String[numero_squadre / 2];
for (int i = 0; i < numero_squadre / 2; i++) {
casa[i] = squadre[i];
trasferta[i] = squadre[numero_squadre - 1 - i];
}
for (int i = 0; i < giornate; i++) {
/* stampa le partite di questa giornata */
System.out.printf("%d^ Giornata\n", i + 1);
/* alterna le partite in casa e fuori */
if (i % 2 == 0) {
for (int j = 0; j < numero_squadre / 2; j++) {
System.out.printf("%d %s - %s\n", j + 1, trasferta[j],
casa[j]);
}
} else {
for (int j = 0; j < numero_squadre / 2; j++) {
System.out.printf("%d %s - %s\n", j + 1, casa[j],
trasferta[j]);
}
}
String pivot = casa[0];
String riporto = trasferta[trasferta.length - 1];
trasferta = shiftRight(trasferta, casa[1]);
casa = shiftLeft(casa, riporto);
casa[0] = pivot;
}
}
private String[] shiftLeft(String[] data, String add) {
String[] temp = new String[data.length];
for (int i = 0; i < data.length-1; i++) {
temp[i] = data[i + 1];
}
temp[data.length - 1] = add;
return temp;
}
private String[] shiftRight(String[] data, String add) {
String[] temp = new String[data.length];
for (int i = 1; i < data.length; i++) {
temp[i] = data[i - 1];
}
temp[0] = add;
return temp;
}
Per le giornate di ritono mi sembra abbastanza ovvio...
Non si deve far altro che invertire le 2 squadre ed il numero della giornata sarà (giornate + i + 1)
Spero torni utile :-)