cs50 tideman lock_paiors函数问题

时间:2020-10-01 12:42:12

标签: cs50

您好,我在pset3 tideman上的我的密码对functinog遇到问题了

bool checkcycle(int from, int to)
{
   if(from == to)
   {
       return true;
   }
   int i;
   for (i = 0; i < candidate_count; i++)
   {
       if(locked[from][i])
       {
           checkcycle(i,to);
       }
   }
   return false;
}


void lock_pairs(void)
{
   for (int i = 0; i < candidate_count; i++)
   {
      if(!checkcycle(pairs[i].winner , pairs[i].loser))
      {
          locked[pairs[i].winner][pairs[i].loser] = true;
      }
    return;
   }
}

:( lock_pairs在没有循环时锁定所有对 lock_pairs没有锁定所有对 :(如果创建周期,lock_pairs会跳过最后一对 lock_pairs没有正确锁定所有非周期性对 :( lock_pairs如果创建周期则跳过中间对 lock_pairs无法正确锁定所有非周期性对

1 个答案:

答案 0 :(得分:0)

您的checkcycle功能只需要稍作调整。我将from更改为winner,将to更改为loser。我认为这会更容易理解。给定一对,您将呼叫checkcycle(winner, loser)。在检查完winner == loser之后,您应该遍历所有对,检查loser是否为winner,并致电checkcycle(winner, loser),传递相同的原始赢家,以及输家的输家