【问题标题】:Recursive Algorithm for Tournament Brackets比赛括号的递归算法
【发布时间】:2011-05-26 23:16:41
【问题描述】:

我正在创建一个锦标赛括号创建脚本,但我遇到了玩家人数非 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();
    }
}

我假设我们需要更多的“基本案例”。或者可能更多的 if 语句用于这些关闭的情况。

函数 draw_series_container() 和 draw_player_box 只是用 HTML 代码填充。如果我们需要,我可以给他们看。

有人可以先给我一个 5 或 6 人的支架吗?

谢谢!

【问题讨论】:

  • 请解释一下这个公式:$levels = floor(log($numplayers, 2)); - 你真的是说natural logarithm?为什么级别数取决于对数?看起来很奇怪。
  • 我从这里得到的:stackoverflow.com/questions/1294412/…。我不完全确定它为什么起作用……但测试多达 32 个表明它确实有效。 :P

标签: php recursion


【解决方案1】:

等级的正确公式是
$levels = intval(log($numplayers, 2))+1;

【讨论】:

  • 使用我当前的算法,+ 1 打印太多玩家,至于 - 1 打印正确数量。也许我做错了什么。
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多