スケジュールの問題に直面していますが、
私たちは 9 チームを持っています..すべてのチームについて、他のすべてのチームとの 1 つの試合をスケジュールする必要があります..
つまり、9週間にわたって毎週4試合があります..
以下の関数を使用して、すべての一致を組み合わせ 9c2 として取得できます
$matches = getCombinations(array(1, 2, 3, 4, 5, 6, 7, 8, 9), 2);
function getCombinations($teams, $group_length) {
$teams_len = count($teams);
if($group_length == 1) {
$return = array();
foreach($teams as $b){
$return[] = array($b);
}
return $return;
} else {
//get one level lower combinations
$oneLevelLower = getCombinations($teams, $group_length-1);
//for every one level lower combinations add one element to them that the last element of a combination is preceeded by the element which follows it in base array if there is none, does not add
$newCombs = array();
foreach($oneLevelLower as $oll){
$lastEl = $oll[$group_length-2];
$found = false;
foreach($teams as $key => $b){
if($b == $lastEl){
$found = true;
continue;
//last element found
}
if($found == true){
//add to combinations with last element
if($key < $teams_len){
$tmp = $oll;
$newCombination = array_slice($tmp,0);
$newCombination[]=$b;
$newCombs[] = array_slice($newCombination,0);
}
}
}
}
}
return $newCombs;
}
すべての一致を返します..
array (size=36)
0 =>
array (size=2)
0 => int 1
1 => int 2
1 =>
array (size=2)
0 => int 1
1 => int 3
2 =>
array (size=2)
0 => int 1
1 => int 4
3 =>
array (size=2)
0 => int 1
1 => int 5
4 =>
array (size=2)
0 => int 1
1 => int 6
5 =>
array (size=2)
0 => int 1
1 => int 7
6 =>
array (size=2)
0 => int 1
1 => int 8
7 =>
array (size=2)
0 => int 1
1 => int 9
8 =>
array (size=2)
0 => int 2
1 => int 3
9 =>
array (size=2)
0 => int 2
1 => int 4
10 =>
array (size=2)
0 => int 2
1 => int 5
11 =>
array (size=2)
0 => int 2
1 => int 6
12 =>
array (size=2)
0 => int 2
1 => int 7
13 =>
array (size=2)
0 => int 2
1 => int 8
14 =>
array (size=2)
0 => int 2
1 => int 9
15 =>
array (size=2)
0 => int 3
1 => int 4
16 =>
array (size=2)
0 => int 3
1 => int 5
17 =>
array (size=2)
0 => int 3
1 => int 6
18 =>
array (size=2)
0 => int 3
1 => int 7
19 =>
array (size=2)
0 => int 3
1 => int 8
20 =>
array (size=2)
0 => int 3
1 => int 9
21 =>
array (size=2)
0 => int 4
1 => int 5
22 =>
array (size=2)
0 => int 4
1 => int 6
23 =>
array (size=2)
0 => int 4
1 => int 7
24 =>
array (size=2)
0 => int 4
1 => int 8
25 =>
array (size=2)
0 => int 4
1 => int 9
26 =>
array (size=2)
0 => int 5
1 => int 6
27 =>
array (size=2)
0 => int 5
1 => int 7
28 =>
array (size=2)
0 => int 5
1 => int 8
29 =>
array (size=2)
0 => int 5
1 => int 9
30 =>
array (size=2)
0 => int 6
1 => int 7
31 =>
array (size=2)
0 => int 6
1 => int 8
32 =>
array (size=2)
0 => int 6
1 => int 9
33 =>
array (size=2)
0 => int 7
1 => int 8
34 =>
array (size=2)
0 => int 7
1 => int 9
35 =>
array (size=2)
0 => int 8
1 => int 9
しかし、1チームが1日に2試合というわけにはいかず、1チームにつき4試合が必要となる..
そのため、毎週 8 チームが 4 試合を行い、残りの 1 チームが 1 チームにつき 4 試合になるように、これらの試合を週のスケジュールに編成する必要があります。
* PS私は組み合わせ関数を実装しませんでした.誰か..thnxから彼にコピーしました..そして私たちはphpを使用していますが、ここでは言語は重要ではないと思います..