如何用一组固定的整数对填充网格,使每一行都恰好包含每个整数一次?

问题描述 投票:0回答:0

我正在用 C# 编写一个 NFL 足球模拟器小部件以在后台运行并向我显示模拟游戏和比分等等。虽然正常的 NFL 有 32 支球队,但我在 2 个新部门中又增加了 8 支球队,现在我正在尝试编写时间表生成器。幸运的是,我已经能够为每个团队生成一组有效的对决,现在我只是想安排它。幸运的是,至此,我可以更简单地表达问题了。

  • 有一个 20x16 的网格,其中每一列是一周内的游戏编号,每一行是一周的比赛。
  • 每个网格单元要么是空的,要么可以举行两队之间的比赛。一旦时间表完成,这个网格应该完全填满。
  • 在这些比赛中,一支球队从不面对自己(即公羊队从不打自己)。
  • 每支球队得到16场比赛,这些比赛已经预先计算好了。
  • 两支球队每个赛季将多次交锋(即爱国者队将不止一次与比尔交锋)。
  • 由于每支球队在可能的 39 场比赛中只与 16 场比赛,因此在 320 场比赛的赛季中根本不会发生很多比赛。

我的目标听起来很简单:

  • 填满 20x16 网格中的所有 320 个槽位,使每一行都让每个团队只出现一次。

就是这样,没有进一步的限制。但它并不像听起来那么简单。通常,我们可能会使用 40 支球队中的 38 支,在一排的 20 个位置中填满 19 个,但剩下的 2 支球队从不互相比赛。

我确实看过一些循环赛算法,但他们似乎假设每支球队都会与其他球队比赛。

如何填充我的 20x16 网格,使每一行的所有 40 个团队恰好出现一次?

或:

考虑到一个赛季中发生的所有比赛,我如何生成 NFL 赛程表,以便所有球队每周比赛,没有球队在同一周比赛两次?

c# .net constraints sports-league-scheduling-problem
© www.soinside.com 2019 - 2024. All rights reserved.