cs50 tideman lock final pair error, 什么问题?

问题描述 投票:0回答:0

我已经为这个 pset 苦苦挣扎了将近一个星期,我觉得真的很接近解决它了

只有一个错误,我希望你能告诉我为什么它仍然存在:

:( lock_pairs 跳过最后一对,如果它创建循环

lock_pairs 没有正确锁定所有非循环对

这是我的代码:

bool paths(int winr,int losr)
{
    if(locked[losr][winr])
    {
        return true;
    }
    else
    {
        for(int i = 0 ; i < pair_count ; i++)
            {
                if((losr==pairs[i].winner)&&(locked[pairs[i].winner][pairs[i].loser]))
                return paths(winr,pairs[i].loser);
            }
    }
    return false;
}
void lock_pairs(void)
{
    // TODO
    bool potential;
    for(int i = 0 ; i < pair_count ; i++)
    {
        for(int j = 0 ; j < pair_count ; j++)
        {
            if(!(pairs[i].loser==pairs[j].winner&&locked[pairs[j].winner][pairs[j].loser]))
            potential=false;
            else
            {
                potential=true;
                break;
            }
        }
        if(potential==false)
        locked[pairs[i].winner][pairs[i].loser]=true;
        else if(potential)
        {
              for(int k = 0 ; k < pair_count ; k++)
              {
              if(pairs[i].loser==pairs[k].winner&&locked[pairs[k].winner][pairs[k].loser])
              {
               if(paths(pairs[i].winner,pairs[i].loser))
               break;
               else if(paths(pairs[i].winner,pairs[i].loser)==false)
               locked[pairs[i].winner][pairs[i].loser]=true;
              }
              }
        }
    }
}

注意我只在存在潜在的间接循环时才调用 paths()。

graph-theory cs50
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.