Cs50 - Tideman
if (!has_ties) printf("✓ No ties in sorted pairs (all margins unique)\n"); }
return true; }
// Run the tie-breaking visualization add_pairs(); visualize_tie_breaking(); // NEW FEATURE cs50 tideman
for (int i = 0; i < pair_count; i++) { int winner = pairs[i].winner; int loser = pairs[i].loser; printf("\nAttempting to lock: %s → %s", candidates[winner], candidates[loser]); // Check if adding this edge creates a cycle if (!creates_cycle(winner, loser)) { locked[winner][loser] = true; printf(" ✓ LOCKED\n"); // Visualize current state of locked pairs printf(" Current locked pairs: "); bool has_locked = false; for (int a = 0; a < candidate_count; a++) { for (int b = 0; b < candidate_count; b++) { if (locked[a][b]) { printf("%s→%s ", candidates[a], candidates[b]); has_locked = true; } } } if (!has_locked) printf("none"); printf("\n"); } else { printf(" ✗ SKIPPED (would create cycle)\n"); } }
return 0; } When you run this feature, you'll see: } return true
int margin = preferences[pairs[pair_index].winner][pairs[pair_index].loser] - preferences[pairs[pair_index].loser][pairs[pair_index].winner];
// Identify and highlight ties printf("\n--- TIE ANALYSIS ---\n"); bool has_ties = false; for (int i = 0; i < pair_count - 1; i++) { int margin_current = preferences[pairs[i].winner][pairs[i].loser] - preferences[pairs[i].loser][pairs[i].winner]; int margin_next = preferences[pairs[i + 1].winner][pairs[i + 1].loser] - preferences[pairs[i + 1].loser][pairs[i + 1].winner]; if (margin_current == margin_next) { if (!has_ties) { printf("\n⚠️ TIES DETECTED in ranking:\n"); has_ties = true; } printf(" Ranks %i and %i have equal victory margins\n", i + 1, i + 2); } } i++) { int winner = pairs[i].winner
// Feature: Visualize tie-breaking in sorted pairs void visualize_tie_breaking(void) { printf("\n=== TIE-BREAKING VISUALIZATION ===\n"); printf("Total pairs created: %i\n", pair_count);