C#: Algorithmus für einen Liga-Spielplan


Ein Algorithmus in C# zur Bestimmung eines Spielplanes von n Mannschaften. n muss gerade sein. Dies ist aber keine Einschränkung: Für eine ungerade Anzahl an Mannschaften fügt man noch eine Dummy-Mannschaft "Spielfrei" ein und hat dann wieder eine gerade Anzahl, auf die man den Algorithmus loslassen kann. Wie man sieht ging es mir nicht um Übersichtlichkeit :-)
// Plan(n)[Heim,Gast] ist der Spieltag(1..2*n-2), an dem Mannschaft 'Heim' (0..n-1) gegen Mannschaft 'Gast' (0..n-1) spielt.
int [,] Plan(int n)
{
   int[,]t=new int[n,n];
   for(int s=1,p,o,u,n1=n-1;s<n;s++)
   for(p=1,o=u=s-1,t[s-1,n1]=s+n1*(s&1),t[n1,s-1]=s+n1*(1-(s&1));p<n/2;t[o,u]=s+n1*(1-((p++)&1)))
      t[u=u>n-3?0:u+1,o=o<1?n-2:o-1]=s+n1*(p&1);
   return t;
}
Stefan-Taube.de