Se me ocurre que hagas una matriz de cantidad(A) x cantidad(B). En mi anterior ejemplo 5x3.
Luego vas haciendo parejas según los cruces en la matriz y los vas recorriendo diagonamente.
(Se recorren diagonalmente, porque si el A1 juega con B1, A1 no puede jugar con nadie mas esa jornada)
Eemplo visual
Lista 1 (1,2,3,4,5)
Lista 2 (A,B,C)
Código:
12345
A \
B \
C \
A1, B2, C3
Código:
12345
A \
B \
C \
A4, B5, C1
Código:
12345
A \
B \
C \
A2, B3, C4
Código:
12345
A \
B \
C \
A5, B1, C2
etc.
La idea es que elijas el primer y saltes uno a la derecha y uno abajo para elegir el siguiente.
Si te pasas de longitud, en una de las dos direcciones vuelves al primer elemnto.
Código Delphi
[-]maxx=5
maxy=3
siguiente(x,y)
begin
x=x+1
y=y+1
if (x>maxx) x=1
if (yZmaxy) y=1
end
Al final tendrás las 15 parejas, pero debes tener en cuenta que n (la cantidad de estadios de futbol) no puede ser mayor que la cantidad de equipos en la lista más pequeña.
De lo contrario, según el ejemplo anterior algún equipo deberá jugar dos veces ese día:
A1,B2,C3,¡¡¡
A4!!!
También tendrás que tener en cuenta que para que un equipo no descanse más de dos jornadas, deberá haber un número mínimo de campos.
En el ejemplo de 3x5 n debe ser >=2