Bonjour,

je développe en amateur un logiciel pour tournoi de jeu de stratégie en vis à vis. Je génère déjà des rondes suisses, suisses accélérées, round-robin, coupes le tout en poules séparées ou unique.

Il m'a été soumis récemment un problème que j'ai bien du mal à résoudre, je me permet donc de le poster ici.

Les matchs se font joueurs contre joueurs, sachant que chaque joueur peut être membre d'une équipe. Le but est de tirer des matchs pour qu'après chaque ronde, le nombre d'opposition entre équipes est équilibré (Les joueurs de l'équipe A ont joué 3 fois contre B, 3 fois contre C, etc ..), et le nombre d'équipes rencontrées par joueur soit également équilibré (A1 a joué 1 fois contre C, 1 fois contre B, etc ...). Par équilibré, j'entends que la différence entre le nombre maximum et le nombre minimum soit inférieur ou égal à 1.

Si je calcule tous les tirages et que garde le premier tirage correct rencontré, sachant que par exemple pour 30 joueurs (5 équipes de 6), il y a déjà 1400 milliards de possibilités et que certains tournois dépassent les 200 joueurs, cette méthode n'est pas valide à moins d'avoir une nuit de calcul devant soi (et encore).

Dans les algorithmes que j'utilise généralement dans le logiciel, j'ai une liste de joueurs et je cherche les opposants possibles parmi les joueurs restant, puis je passe au suivant. Cela fonctionne pour les premières rondes. Mais si j'arrive à la fin de la liste et que plus aucun joueur disponible n'est possible, c'est là que les ennuis commencent.

Quelqu'un a-t-il une idée ?