您好,我在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无法正确锁定所有非周期性对
答案 0 :(得分:0)
您的checkcycle功能只需要稍作调整。我将from
更改为winner
,将to
更改为loser
。我认为这会更容易理解。给定一对,您将呼叫checkcycle(winner, loser)
。在检查完winner == loser
之后,您应该遍历所有对,检查loser
是否为winner
,并致电checkcycle(winner, loser)
,传递相同的原始赢家,以及输家的输家