Hacer una matriz de tantas filas y columnas como equipos más una fila
A partir de ahí, tendrás que iterar siempre de izquierda a derecha y de arriba abajo o en columnas, pero siempre en el mismo orden. De no hacerlo así, te saldrán partidos repetidos.
Además, tienes que llevar el control de las columnas y filas que se eliminan en cada iteración.
Ejemplo
Son seis los equipos. Creamos una matriz de filas = nº de equipos más dos y columnas nº de equipos más dos LA diagonal central se anula, ya que no pueden jugar contra sí mismos.
Código:
Anulacion
x 1 2 3 4 5 6
1 x
2 x
3 x
4 x
5 x
6 x
Las iteraciones terminan cuando has terminado con todos los partidos del equipo 1. Esto indicará la primera vuelta.
primera jornada:
Iteración 1
Primera columna: El equipo 1 se enfrentará consigo mismo. Como la casilla está ocupada, se sigue con la siguiente columna.
Siguiente columna: Como está vacía, se pone un “1”, primera jornada, partido 1 vs 2. En la primera fila y la primera columna, se marcan las filas y columnas 1 y 2 ya que están ya asignados esos equipos.
Se cuenta 1 en el contador de partidos, que máximo será 3 porque son seis equipos.
Iteración 2: Se salta la fila 2 ya que este equipo está ya ocupado en esta jornada.
Iteración 3: se saltan las columnas 1 y 2 porque los equipos están ocupados. La siguiente columna se salta porque no puede jugar contra sí mismo ¿ quién ganaría ¿
Siguiente columna: como está libre, se pone un “1”, segundo partido de la jornada 1.
Se marcan las filas y columnas de los equipos 3 y 4, ya que ya están asignados para esta jornada.
Se cuenta uno al contador de partidos.
Iteración 4: se saltan las filas 1,2,3 y 4 por estar ya asignados los equipos.
Con el equipo 5 se saltan las columnas de los equipos 1,2 ,3 y cuatro. También la del 5 por ser el mismo equipo. Ponemos en la casilla de los equipos 5 y 6 que está libre otro “1” de la primera jornada.
Se suma uno al contador, como ya hemos llegado a tres, empezamos con la segunda jornada.
El resultado es esta tabla
Código:
Anulacion si si si Si
x 1 2 3 4 5 6
Si 1 x 1
Si 2 x
Si 3 x 1
Si 4 X
5 x 1
6 X
Se desmarcan todos los equipos como ocupados.
El resultado es éste
Código:
Anulacion
x 1 2 3 4 5 6
1 X 1
2 x
3 x 1
4 X
5 x 1
6 X
Segunda jornada.
Empezamos con la fila del equipo 1. Saltamos las casillas ocupadas. Como la columna del equipo 3 está libre, ponemos un “2” de segunda jornada.
Ponemos las filas y columnas de los equipos 1 y 3 ocupadas.
Aumentamos el contador de partidos.
Pasamos a la fila 2, que no está ocupada.
Saltamos las columnas de los equipos 1, 2 y 3 por lo ya descrito anteriormente. Plantamos un “2” en la casilla de los equipos 2 y 4.
Marcamos las filas y columnas de los equipos 2 y 4 como ocupadas
Aumentamos el contador de partidos, ya nos queda menos.
Pasamos a la fila 5 que es la siguiente libre. Recorremos las filas ocupadas hasta la columna 6. Como ya está rellena por el valor “1”, pasamos de largo. Como no hay más columnas, pasamos a la siguiente fila.
Pasamos a la fila 6, y en la columna del equipo 5 ponemos el valor “2”.
Como ya tenemos los tres partidos por jornada, pasaremos a la siguiente jornada.
Se desmarcan todas las filas y columnas como ocupadas.
Aplicamos el algoritmo hasta el final (nº de equipos - 1), y el resultado deberá salir algo parecido a esto
Código:
Anulacion
x 1 2 3 4 5 6
1 X 1 2 3 4 5
2 x 5 2 3 4
3 x 1
4 4 X 5
5 X 1
6 3 2 X
Y ya está. Si quieres puedes utilizar un valor determinado para rellenar las casillas que están ocupadas temporalmente y te ahorras manejar una fila y una columna.
Espero que te sirva de ayuda. Lo único que necesitas es saber cómo se redimensiona una matriz para asignar las filas y las columnas.
Otra cosa que puedes hacer es hacer un stringgrid para ver en pantalla el resultado.
Y por supuesto, gastar lápiz y papel hasta que ajustes perfectamente el algoritmo.
Ya nos contarás.
Un saludo