Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Check if there is still cycles in the graph or not
- bool is_cycle()
- {
- int stack[candidate_count];
- int visited[candidate_count];
- for (int i = 0; i < candidate_count; i++)
- {
- visited[i] = -1;
- }
- int stack_pointer = -1;
- stack[++stack_pointer] = 0;
- while (stack_pointer >= 0)
- {
- int pop = stack[stack_pointer--];
- if (visited[pop] == 0)
- {
- visited[pop] = 1;
- }
- if (visited[pop] == -1)
- {
- visited[pop] = 0;
- }
- for (int i = 0; i < candidate_count; i++)
- {
- if (locked[pop][i] && visited[i] == 1)
- {
- return true;
- }
- if (locked[pop][i])
- {
- stack[++stack_pointer] = i;
- }
- }
- }
- return false;
- }
- // Lock pairs into the candidate graph in order, without creating cycles
- void lock_pairs(void)
- {
- for (int i = 0; i < pair_count; i++)
- {
- int winner = pairs[i].winner;
- int loser = pairs[i].loser;
- locked[winner][loser] = true;
- if (is_cycle())
- {
- locked[winner][loser] = false;
- }
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement