[JAVA] Ayuda con algoritmo "Todos contra todos"

Iniciado por [GB], 15 Septiembre 2010, 20:17 PM

0 Miembros y 1 Visitante están viendo este tema.

[GB]

Resulta que tengo que implementar el algoritmo "todos contra todos" en java, o sea para una liga... en este caso es de futbol.
Luego de estar horas quemandome el coco buscando la forma de poder enfrentarlos todos contra todos sin repeticiones de enfrentamientos probando algoritmos en hoja y papel sin exito, al final como manotazo de ahogado se me da por buscar en google y me ecuentro con este algoritmo que si sirve: http://es.wikipedia.org/wiki/Sistema_de_todos_contra_todos

El tema del algoritmo es asi:

Equipos            Enfrentamientos  

1 2 3 4 5 6   ---> 1vs6 --- 2vs5  -- 3vs4
1 6 2 3 4 5   ---> 1vs5 --- 6vs4  -- 2vs3
1 5 6 2 3 4   ---> 1vs4 --  5vs3  -- 6vs2
1 4 5 6 2 5   ---> 1vs3 --  4vs2  -- 5vs6
1 3 4 5 6 2   ---> 1vs2 --  3vs6  -- 4vs5

La cosa es asi: para determinar el calendario del torneo, se realiza un simple algoritmo de selección... a cada uno de los competidores (en este caso 1 2 3 4 5 6 a la izquieda) se le asigna un número y se van rotando los números, dejando uno fijo (en este caso el 1)

Se procede a "enfrentar" el primero contra el ultimo, el segundo contra el penultimo, el tercero contra el antepenultimo y todo asi... sumando uno del lado izquierdo y restando uno del lado derecho, de tal manera suponiendo que tengamos 6 equipos 1 2 3 4 5 6 los enfrentamientos serian: 1vs6 --- 2vs5  -- 3vs4, etc etc luego para el siguiente mentenemos el 1 fijo y vamos cambiando la segunda posicion.

Bueno el tema es que voy a empezar con la funcion de generarPartido primero y tengo dudas...
Código (java) [Seleccionar]

public static void generarPartidos() {

   int cantCuadros = 5;
   int cantMaxEncuentros=3;
   
   String[] arrEncuentros = new String [cantMaxEncuentros];    
String [] arrCuadros = new String[5];
arrCuadros[0] = "River";
arrCuadros[1]="Boca";
arrCuadros[2]="Newells";
arrCuadros[3]="Indepentiente";
arrCuadros[4]="Estudiantes";
arrCuadros[5]="Velez";

for( int i=0; i<cantMaxEncuentros; i ++ ){
   

      }

   }



Lo que intento hacer es guardar dentro de arrEncuentros en cada posicion los enfrentamientos.. en este caso serian 3 por cada llamada a la funcion "generarPartidos" no tengo mucha idea de como asignar. La idea es que el arrCuadros se pase como parametro a la funcion y se llame varias veces mandando el vector alterado para generar el total de 15 partidos que son, pero lo estoy haciendo todo en esta solo para probar de a 3 partidos por lo menos.
Por ejemplo deberia quedarme asi en cada posicion del vector al ir imprimiendo el contenido de sus posiciones:

River– Velez
Boca – Estudiantes
Newells - Independiente

Quiero solo empezar con esta pequeña partecita y luego ire de a poco con el resto que me piden!
Alguna idea? ayudita? mano .. se agradece!

Shell Root

jejeje no creo que nadie lea todo eso, -lo digo por mi-, quieres un ejemplo de como sería el algoritmo de selección en java?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

[GB]

Precisaría algún ejemplo pero con vectores, es que tengo que hacerlo con vectores... y no me manejo muy bien con eso :S

Xedrox

El algoritmo de todos contra todos es muy sencillo, agarras el primer elemento de tu vector o lista y lo comparas con todos hasta el final, luego agarras el segundo elemento su siguiente hasta el final, luego con el tercero y así sucesivamente.., obviamente esa técnica no te va dejar repeticiones.

sabeeee

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon