CS50的Tideman问题集中的lock_pairs函数存在缺陷

时间:2020-10-29 09:28:28

标签: c cs50

有人可以指出我的逻辑缺陷是什么吗?非常感谢。

基本上,我要使用嵌套循环来检查是否有任何一对输家是上一对输家中的赢家(具有更高的取胜强度)。如果是,那么我进入内循环以检查该对的赢家是否在之前的任何一对中都是输家,从而创造了一个周期。我对构成周期的理解是否正确?我如何在不执行递归的情况下进行纠正?我不知道该怎么做。

void lock_pairs(void)
{
    
  bool cycleCheck = false;
  
  for (int u = 0; u < pair_count; u++)
  {
  
   for (int m = 0; m < u; m++)
   {
    if (pairs[u].loser == pairs[m].winner)
    {
        for (int k = m; k < u; k++)
        {
        if (pairs[u].winner == pairs[k].loser)
        {
            locked[pairs[u].winner][pairs[u].loser] = false;
            cycleCheck = true;
        }
        }
    }
   }
  
  
  if (cycleCheck == false)
  {
      locked[pairs[u].winner][pairs[u].loser] = true;
  }
  
  cycleCheck = false;
  
  }
      
}

1 个答案:

答案 0 :(得分:0)

给定一对A击败B,要检查一个周期,您应该遍历所有对,寻找B作为赢家。然后,对于每个输给B的候选人,您应该遍历所有对,以寻找该候选人为获胜者。然后,对于每个输给该候选人的候选人,您都知道了。如果在任何时候出现A,则为周期。