Liga Spielplan

Algorithmus zum Erstellen eines Spielplans für eine Sportliga

Ich hab mir überlegt, wie ein Algorithmus aussehen muß, der für n Mannschaften einen Liga-Spielplan ausgibt. Das Problem hierbei ist, dass man nicht einfach alle Kombinationen finden kann indem man zwei Schleifen in einander schachtelt. Wenn eine Mannschaft schon Mannschaft B einer Paarung ist, dann kann sie nicht mehr am gleichen Spieltag Mannschat A sein.

Hatte bis dahin keine Lösung, die ohne ein Array auskommt indem nachgeschaut wird, ob die Mannschaft schon gesetzt ist.

Hier mal ein kleines Beispielprogram, dass diese Paarungen ausgibt. Leicht in was eigenes zu verwandeln.

int partner(int x, int st, int anz)
{
  // p partner
  int i,p;
  p=anz;
  int d=0;
  
  // st-d ist dann 0
  if (st==(anz-1))
     {
	 d=anz-1;
	 }

  for (i=1;i<=anz-1;i++)
     {
	 if (i!=x)
	    {
		if ( (x+i)%(anz-1) == (st-d))
		      {
			  if (i>x)
			     p=i;
			  else
			     p=-1;
			  }
		   
		}
	 }
  return p;
}
  

Die Funktion gibt bei eingabe der Mannschaft A (x), dem aktuellen Spieltag st und der Gesamtzahl der Mannschaften den Spielpartner zurück, der am jeweiligen Spieltag Gegner B ist. Wenn die Mannschaft schon eine Mannschaft B ist, dannn gibt die Funktion -1 zurück.

Im wesenlichen geht es darum, dass der Rest der Ganzzahldivision der Summe der beiden Kontrahenten durch die Zahl der Spieltage (Anzahl Mannschaften minus 1) gleich der aktuelle Spieltag ist. Für die Mannschaft, für die das nicht aufgeht wird die letzte Mannschaft gesetzt.

Für den letzten Spieltag muß man sich noch ein paar Kniffe überlegen. Dann muß der Rest von Summe durch Spieltage nicht der aktuelle Spieltag, sondern 0 sein

Quelltext

Das ganze geht man jetzt für jeden Spieltag und jede Mannschaft durch. Mit den Funktionen heim(x,y) und gast(x,y) kann man noch Heim- und Gastrecht auf einfache weiße regeln.

Resultat für n=6

Spieltag 1
	5	1
	4	2
	3	6
Spieltag 2
	1	6
	2	5
	3	4
Spieltag 3
	1	2
	5	3
	6	4
Spieltag 4
	3	1
	6	2
	4	5
Spieltag 5
	1	4
	2	3
	5	6