1

ラウンド ロビン トーナメントの試合場所を設定するためのアルゴリズムを理解しようとしています。

  • 各チームは、ホームで 1 回、アウェイで 1 回の計 2 回、他のチームと対戦します。
  • 各チームにはホーム ロケーションがあります。
  • トーナメントには、同じ本拠地を共有する多くのチームがあります。

私はすでにすべての一致の配列を持っています。一致は次のようになります。

{
  date: "Thu Jan 08 2015 12:00:00",
  home: "Bob",
  away: "Frank",
  location: null
}

すべての一致をループして、location. さまざまな解決策を試しましたが、まだ完全に機能するものはありません。

  • もちろん、ボブの自宅の場所が で利用できる場合は、dateそれをそのまま使用できます。
  • ボブとフランクが対戦するもう 1 つの試合を考慮する必要があります。ホームチームとアウェーチームを切り替えることは問題ありませんが、バランスが取れていることを確認する必要があります。(つまり、ボブとフランクは家でそれぞれ 1 回ずつ遊びます)
  • ホーム/アウェイを切り替えようとしても場所を割り当てることができない場合は、場所の分割を試みる必要があります。

ロケーション分割

複数の試合が 1 つの場所で同時に行われるように、試合場所を分割することができます。場所を分割できるかどうかを判断する方法は、この質問の範囲外ですが、 true または falsecanLocationBeSplit(location)を返す関数が呼び出されたとしましょう。bool

2 チーム間のいずれかの試合で、ホームまたはアウェーの両方の場所を分割できます。ただし、絶対に必要でない限り、場所の分割のみを開始したいと考えています。繰り返しになりますが、各チームはホームで 1 回、アウェイで 1 回プレーする必要があります。

試合に利用できる場所がまだない場合は、そのままにしておきますnull

質問

私の質問は、この問題を解決する適切な再帰アルゴリズムの提案はありますか? 御時間ありがとうございます。

4

1 に答える 1