CS50'中的锁对功能存在缺陷;s-Tideman问题集

CS50'中的锁对功能存在缺陷;s-Tideman问题集,c,cs50,C,Cs50,有人能指出我的逻辑有什么缺陷吗?非常感谢 基本上,我尝试使用嵌套循环来检查任何一对中的输家是否是前一对中的赢家(具有更高的胜利强度)。如果是的话,我接着进入内部循环,检查这对中的赢家是否在之前的任何一对中是输家,从而创建一个循环。我对什么构成循环的理解是正确的吗?我如何在不实现递归的情况下纠正这个问题?我不知道怎么做 void lock_pairs(void) { bool cycleCheck = false; for (int u = 0; u < pair_c

有人能指出我的逻辑有什么缺陷吗?非常感谢

基本上,我尝试使用嵌套循环来检查任何一对中的输家是否是前一对中的赢家(具有更高的胜利强度)。如果是的话,我接着进入内部循环,检查这对中的赢家是否在之前的任何一对中是输家,从而创建一个循环。我对什么构成循环的理解是正确的吗?我如何在不实现递归的情况下纠正这个问题?我不知道怎么做

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;
  
  }
      
}
void锁对(void)
{
bool-cycleCheck=false;
对于(int u=0;u
给定一对a击败B,要检查循环,您应该迭代所有对,寻找B作为赢家。然后,对于每一个输给B的候选人,你应该迭代所有对,寻找这个候选人作为赢家。然后,对于每个输给这个候选人的候选人。。。你明白了。如果在任何时候出现,则为循环