【问题标题】:CS50- pset3-tideman: lock_pairs did not correctly lock all non-cyclical pairsCS50- pset3-tideman:lock_pairs 没有正确锁定所有非周期性对
【发布时间】:2021-08-27 21:22:50
【问题描述】:

无法找出此代码失败的测试用例。除此错误外均为绿色:CS50- pset3-tideman: lock_pairs 未正确锁定所有非循环对。 我需要知道这里的逻辑缺陷,而不是解决方案。

// 将对按顺序锁定到候选图中,不创建循环

void lock_pairs(void)
{
    // TODO
    for (int i = 0; i < pair_count; i ++)
    {
        if(!is_circle(pairs[i].loser, pairs[i].winner))
        {
            locked[pairs[i].winner][pairs[i].loser] = true;
        }

    }
    return;
}

bool is_circle(int loser, int winner)
{
    if (loser == winner)
    {
        return true;
    }
    for (int i = 0; i < pair_count; i ++)
    {
        if (locked[loser][i])
        {
            return is_circle(i, winner);
        }
    }
    return false;
}

【问题讨论】:

    标签: c recursion cs50


    【解决方案1】:

    如果is_circle的递归调用返回false,该函数可能不会立即返回,但必须从本地i检查可能的其他对边:

                return is_circle(i, winner);
    

    必须是

                if (is_circle(i, winner)) return true;
    

    【讨论】:

    • 谢谢,我搞砸了!!
    猜你喜欢
    • 2023-03-23
    • 2021-01-23
    • 2020-09-04
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多