2011-05-26 45 views
2

我正在創建一個錦標賽括號創建腳本,並且我遇到了錦標賽的玩家數量非2的功率。例如,它目前對於2,4,8, 16,32,...等等,但是對於3,5,6,7 ...我很難過!錦標賽括號的遞歸算法

這是我到目前爲止有:

$numrows = 8; // Currently for Testing. 
draw_bracket($numrows); 

function draw_bracket($numplayers) 
{ 
    draw_series_container(); 
    draw_bracket_layer($numplayers, 0); 
    draw_series_container_end(); 
} 

/* RECURSION, YO! */ 
function draw_bracket_layer($numplayers, $layer) 
{ 
    $levels = floor(log($numplayers, 2)); 
    if ($layer == $levels - 1) 
    { 
     draw_player_box(); 
     draw_player_box(); 
    } 
    else 
    { 
     draw_series_container(); 
      draw_bracket_layer($numplayers, $layer + 1); 
     draw_series_container_end(); 

     draw_series_container(); 
      draw_bracket_layer($numplayers, $layer + 1); 
     draw_series_container_end(); 
    } 
} 

我假設我們需要更多的「基地的情況下」。或者也許更多,如果這些情況下的聲明。

函數draw_series_container()和draw_player_box只是填充了HTML代碼。如果需要,我可以給他們看。

有人可以用5或6人的支架開始我嗎?

謝謝!

+0

請解釋一下這個公式:'$ =水平地板(日誌($ numplayers,2));' - 你真的是'自然logarithm'?爲什麼數量級取決於對數?看起來很奇怪。 – 2011-05-26 23:32:44

+0

我從這裏得到:http://stackoverflow.com/questions/1294412/tournament-brackets-algorithm。我不完全確定它爲什麼工作...但測試多達32個顯示它。 :P – Peanut 2011-05-26 23:35:17

回答

1

水平的正確的公式是
$levels = intval(log($numplayers, 2))+1;

+0

與我目前的算法,+ 1打印太多玩家,因爲 - 1打印正確的金額。也許還有其他事情我做錯了。 – Peanut 2011-05-27 00:29:36

+0

我無法檢查沒有全部功能的代碼。 – 2011-05-27 00:41:46