El sistema de todos contra todos o sistema de liga es un sistema de competición, generalmente deportiva, en que todos los participantes del torneo se enfrentan entre ellos en un número constante encuentros. Este tipo de competición es también llamado liguilla o round-robin.
Para determinar el calendario del torneo, se realiza un simple algoritmo de selección. A cada uno de los competidores se le asigna un número y se van rotando los números, dejando uno fijo. Por ejemplo, en un torneo con 10 equipos:
1ª ronda: (A contra J, B contra I, … ) A B C D E J I H G F
2ª ronda: (A contra I, J contra H, … ) A J B C D I H G F E
/**
*
* @author ISC-Luis
*/
public class RoundRobin {
public static void main(String[] args) {
RoundRobin rr = new RoundRobin();
for (int i = 0; i < 9; i++) {
rr.mostrar();
rr.combinar();
}
}
private String[] equipos= new String[10];
public RoundRobin() {
this.equipos[0]="A";
this.equipos[1]="B";
this.equipos[2]="C";
this.equipos[3]="D";
this.equipos[4]="E";
this.equipos[5]="F";
this.equipos[6]="G";
this.equipos[7]="H";
this.equipos[8]="I";
this.equipos[9]="J";
}
public void combinar(){
String buffer=equipos[equipos.length-1];
for (int i = equipos.length-1; i > 1; i--) {
equipos[i]=equipos[i-1];
}
equipos[1]=buffer;
}
public void mostrar(){
for (int i = 0, j=equipos.length-1; i<j; i++, j--) {
System.out.println(equipos[i]+" vs "+ equipos[j]);
}
System.out.println("*************************************");
}
}
Allí esta el código del ejemplo del algoritmo de round-robin
ya implementado con 10 equipos, en java.!!
Si hay alguna duda o comentario estoy para servirles en lo que se les ofrezca..!
Muy bueno, ya habia andando buscandolo y no lo abia encontrado
ResponderEliminarMagnifica ayuda al problema en cuestion de round robin.. solo una salvedad en la primera combinacion se emparejan 8 equipos de los 10 existentes ¿no?
ResponderEliminarY por cierto, como harías para incluir una fecha a cada partido que se tenga que disputar?
un saludo
Gracias por interesarte en el post, recuerda que son 10 equipos por lo tanto cada equipo disputara de 9 encuentros en el torneo, si te das cuenta en el metodo main creo un objeto de la clase y en el ciclo for inicio mi variable i=0 luego indico que i sea menor que 9 es decir se repetira 9 beces, recuerda que inicio en 0.
EliminarOsea tomara los valores de 0,1,2,3,4,5,6,7,8 que serian 9 combinaciones.
RoundRobin rr = new RoundRobin();
for (int i = 0; i < 9; i++) {
rr.mostrar();
rr.combinar();
}
Con respecto a la fecha podriamos agregar un objeto de tipo date el cual los usariamos para mostar fechas en el metodo mostrar y ya sea con un auxiliar o editando el ciclo for incrementariamos ese dato. Si gustas intentalo aver si te sale sino me dices tus dudas y te lo programo.
EliminarMuchisimas Gracias me acabas de salvar la vida literalmente y el cuatrimestre :D
ResponderEliminarMuchas Gracias...Luis Enrique!
ResponderEliminarGran aporte
Saludos
Excelente ejemplo pero como podria hacer para que los equipos sea traidos desde una base de datos !!?
ResponderEliminarTrae todo dentro de un array y sustituis por el array equipos que tienes creados con datos por default
EliminarExcelente
ResponderEliminarY para cantidad de equipos impares ? ahi no saca bien
ResponderEliminarEn teoria la cantidad de partidos que se deben jugar es:
(cant*(cant-1))/2 Por ejemplo con 5 datos deberian haber 10 partidos y solo salen 8
Este comentario ha sido eliminado por el autor.
Eliminarmuchas gracias me había elaborado un algoritmo super enquilombado que ademas no funcionaba para hacer un fixture y esto me ayudó.
ResponderEliminar