lock_pairs
如果创建周期有效则跳过最后一对
让所有lock_pair
休息,打印赢家将无法工作。我无法修复它。
bool check(int x, int y, int i) //check for cycle // returns true if no cycle
{
for (int k = i - 1; k >=0; k--)
{
if (pairs[i].loser == pairs[k].winner)
{
return false;
}
}
return true;
}
// Lock pairs into the candidate graph in order, without creating cycles
void lock_pairs(void)
{
locked[pairs[0].winner][pairs[0].loser] = true;
locked[pairs[1].winner][pairs[1].loser] = true;
for (int i = 2; i < pair_count; i++)
{
if (check(pairs[i].winner, pairs[i].loser, i) == true)
{
locked[pairs[i].winner][pairs[i].loser] = true;
}
}
return;
}
// Print the winner of the election
void print_winner(void)
{
// TODO
for (int i = 0; i < pair_count; i++)
{
if(locked[pairs[i].winner][pairs[i].loser] == true)
{
if (win(i) == true)
{
printf("%s", candidates[pairs[i].winner]);
}
}
}
return;
}
bool win(int a)
{
for (int j = 0; j < pair_count; j++)
{
if (locked[pairs[j].winner][pairs[j].loser] == true)
{
if (pairs[a].winner == pairs[j].loser)
{
return false;
}
}
}
return true;
}