O Algoritmo de Emparelhamento: Como os Emparelhamentos Suíços Realmente Funcionam

Capítulo 5 — Guidemdash; Guia How the FIDE Dutch pairing algorithm works: criteria C1-C19 simplified, score groups, colors, floaters. Updated for FIDE 2026 rules. Includes TRF file guide.

Every time you click "Generate Pairings" in a Swiss tournament, a sophisticated algorithm runs in milliseconds behind the scenes. Understanding how it works won't just satisfy your curiosity — it'll help you explain "unusual" pairings to players, avoid common configuration mistakes, and get the most out of your pairing software. This chapter demystifies the FIDE Dutch System, updated for the rules effective 1 February 2026.

Why an algorithm? Why not just pair manually?

In the very early days of chess tournaments, arbiters paired players by hand — often with a physical board and colored tokens. For 8 players over 5 rounds, that's manageable. For 200 players over 9 rounds, it's a logistical nightmare that takes hours and is prone to errors.

More importantly, pairing by hand introduces bias. An arbiter who knows the players might (consciously or not) create "interesting" matchups, favor certain players, or avoid certain combinations. An algorithm is deterministic and transparent: given the same input, it always produces the same output, and anyone can verify the result.

The FIDE Dutch System is not a single rule — it's a ranked hierarchy of criteria. The algorithm tries to satisfy the highest-priority criteria first, and only relaxes lower-priority ones when there is no other way to complete the round's pairings.

What changed in FIDE 2026

On 1 February 2026, FIDE put into effect a revised version of the Swiss pairing rules (C.04.1, C.04.2, C.04.3). The changes are mostly clarifications and renumbering, but they matter for any FIDE-rated event from that date onward:

AreaBefore Feb 2026From Feb 2026
Criteria numbering Various letter/number codes (A1, B1…) Unified C1–C19 sequence
Color allocation Some ambiguity in edge cases Explicit rules for all edge cases
Unplayed games Treated as full-point win for color history Treated as ½ point for both color and Buchholz purposes
Burstein system Described in C.04.4 Remains in C.04.4, minor clarifications
Double-Swiss system New: C.04.5 (two parallel Swiss brackets)
Baku Acceleration C.04.5 Renumbered C.04.7
§ FIDE C.04.1 Basic Rules (effective 1 Feb 2026) and C.04.3 FIDE Dutch System (effective 1 Feb 2026) are the primary references. → Read C.04.1  |  → Read C.04.3

Score groups: the foundation of Swiss pairing

The fundamental idea of the Swiss system is simple: players with equal scores play each other. A score group is the set of all players who have the same number of points at a given point in the tournament.

Within each score group, players are ranked by their seeding (which is usually based on their pre-tournament rating). The group is then split into two halves: the top half (higher-seeded players) and the bottom half (lower-seeded players). Player 1 in the top half faces player 1 in the bottom half, player 2 faces player 2, and so on.

Score group pairing — visual example (8 players, Round 1)
SCORE GROUP: 0.0 points (all players, Round 1)
S1Fischer2200 — TOP HALF
S2Kasparov2180 — TOP HALF
S3Tal2150 — TOP HALF
S4Petrosian2120 — TOP HALF
S5Spassky2080 — bottom half
S6Karpov2050 — bottom half
S7Botvinnik1990 — bottom half
S8Lasker1960 — bottom half
↕ pair top half vs bottom half (S1↔S5, S2↔S6, S3↔S7, S4↔S8)
Fischer (W)vsSpassky (B)
Kasparov (W)vsKarpov (B)
Tal (W)vsBotvinnik (B)
Petrosian (W)vsLasker (B)

After round 1, the score groups split. Players who won (1.0 point) form the top group. Players who drew (0.5) form the middle group. Players who lost (0.0) form the bottom group. The algorithm then tries to pair within each group — but things get complicated quickly, as we'll see in Round 2.

The criteria hierarchy: C1 to C19

The FIDE Dutch system defines 19 criteria, ordered by priority. When generating pairings for a score group, the algorithm tries to find a pairing that satisfies as many high-priority criteria as possible. If satisfying C3 means violating C7, it chooses C3 — unless C3 is itself overridden by C1 or C2.

Here are the most important criteria explained in plain language:

  • C1
    No player receives more than one bye Absolute
    A bye (free point when there's an odd number of players) can only be awarded once per player, and never to a player who has already received one. This cannot be overridden.
  • C2
    No player meets the same opponent twice Absolute
    The algorithm will never pair two players who have already faced each other in the same tournament. This is an absolute rule — it cannot be relaxed, even in the last round. If avoidance is truly impossible (very small tournaments with many rounds), the arbiter must intervene.
  • C3
    Minimize score difference between paired players High
    Players in the same score group ideally have identical scores. If pairing within the group is impossible, the algorithm may pair across score groups (floaters), but tries to minimize the score gap. A player on 3.0 points playing someone on 2.5 is better than playing someone on 2.0.
  • C4
    Minimize the number of downfloaters High
    A downfloater is a player who is moved from their score group down to the next group because they couldn't be paired within their own group. The algorithm tries to minimize how often this happens.
  • C5
    No player downfloats twice in a row if avoidable High
    If a player was moved down to a lower group last round, the algorithm tries to avoid doing it again this round. Consecutive downfloating is penalized heavily.
  • C6–C8
    Color balance and alternation High
    Each player should alternate colors (White, Black, White, Black…) as much as possible. No player should have more than 2 consecutive games of the same color. The "color preference" is tracked from round 1 and influences every subsequent pairing decision.
  • C9–C12
    Color difference constraints Medium
    The "color difference" is the count of White games minus Black games. FIDE rules aim to keep this within ±1 for as long as possible. Players with large color imbalances get priority for their preferred color in the next round.
  • C13–C19
    Seeding and pairing quality within score group Medium
    Among all valid pairings that satisfy C1–C12, the algorithm selects the one that best matches the "ideal" top-half vs bottom-half structure. This is where the rating/seed order comes back into play as a quality measure within the group.
The key insight

The algorithm is not optimizing for "the best chess matchup" — it's optimizing for adherence to the criteria hierarchy. Sometimes this produces pairings that look odd to players. Section 9 of this chapter explains the most common "strange pairing" scenarios.

Color allocation: White, Black, and balance

Color assignment is one of the most misunderstood parts of Swiss pairing. Players often feel they're getting too many Blacks — and sometimes they're right, but usually the algorithm is doing exactly what the rules require.

Color preference vs color right

A player has a color preference if their color history is imbalanced (more Whites than Blacks or vice versa). They have a color right if they've had two consecutive games of the same color — in that case, they must receive the opposite color next, unless it's impossible to pair the round at all.

When two players with conflicting color rights are paired together, the algorithm must break the rule for one of them. It chooses the player with the lesser claim — typically the one whose color sequence has been less imbalanced overall.

Color in Round 1

In Round 1, all players have an equal color history (none). Colors are assigned by a general principle: the higher-seeded player (in the top half) receives White, the lower-seeded player receives Black. This is why in the Alekhin Memorial, Fischer (S1) plays White and Spassky (S5) plays Black.

§ Color allocation rules are specified in FIDE C.04.3, sections 4–7 (effective 1 Feb 2026). → Read C.04.3

Floaters and downfloaters

When a score group has an odd number of players, one player cannot be paired within the group and must be moved. This player is called a floater.

A downfloater is moved to the next lower score group (e.g., from the 3.0-point group to the 2.5-point group). An upfloater is the player in the lower group who receives this "guest" from above.

The algorithm tries to minimize floating (criteria C4–C5). When floating is unavoidable, it follows specific rules about who floats: the lowest-ranked player in the score group is the preferred downfloater, unless that player already downfloated last round or has a particularly strong color claim that makes pairing in the lower group impossible.

📉 Downfloater example — Round 2 of Alekhin Memorial

After Round 1: Fischer, Kasparov, Tal, Petrosian all won → 4 players at 1.0 point (even group, no floater needed).

Spassky, Karpov, Botvinnik, Lasker all lost → 4 players at 0.0 points (even group, no floater needed).

Round 2 is clean: the 1.0 group pairs within itself, the 0.0 group pairs within itself.

But imagine Tal drew instead of winning: then we'd have 3 players at 1.0, 2 at 0.5, and 3 at 0.0. The 0.5 group has only 2 players — which is fine (one pairing). But the 1.0 group has 3 players — one must downfloat to the 0.5 group. The lowest-ranked player at 1.0 (Petrosian, S4) becomes the downfloater.

Round 1 in detail: the Alekhin Memorial

Let's trace the complete Round 1 pairing step by step for our 8-player tournament.

Input: 8 players, all at 0.0 points, ranked by rating seed. One score group: {Fischer, Kasparov, Tal, Petrosian, Spassky, Karpov, Botvinnik, Lasker}.

Step 1 — Split in half: Top half = Fischer, Kasparov, Tal, Petrosian (S1–S4). Bottom half = Spassky, Karpov, Botvinnik, Lasker (S5–S8).

Step 2 — Apply criteria C1–C2: No previous opponents (first round), so no constraint. No byes yet.

Step 3 — Ideal pairing: S1↔S5, S2↔S6, S3↔S7, S4↔S8. All criteria satisfied. This is the pairing.

Step 4 — Color assignment: Top half gets White by default in Round 1.

Alekhin Memorial — Round 1 Final Pairings
Bd 1Fischer (W)vsSpassky (B)
Bd 2Kasparov (W)vsKarpov (B)
Bd 3Tal (W)vsBotvinnik (B)
Bd 4Petrosian (W)vsLasker (B)

Round 2 in detail: score groups form

After Round 1 results (Fischer 1–0 Spassky, Kasparov 1–0 Karpov, Tal 1–0 Botvinnik, Petrosian 1–0 Lasker), we have two score groups:

Group A (1.0 pt): Fischer, Kasparov, Tal, Petrosian — all 4 won.
Group B (0.0 pts): Spassky, Karpov, Botvinnik, Lasker — all 4 lost.

Group A pairing: Split in half → Fischer, Kasparov (top) vs Tal, Petrosian (bottom). Ideal: Fischer↔Tal, Kasparov↔Petrosian. Check C2: none played each other yet. ✓

Color step: In Round 1, Fischer and Kasparov had White. Now they need Black. Tal and Petrosian had Black, now they need White. So: Tal (W) vs Fischer (B), Petrosian (W) vs Kasparov (B). ✓

See pairings generated live in ChessPairings.org

Create a test tournament with 8 players and watch the algorithm work round by round.

Try it now →

"Strange" pairings: why does this happen?

Players and organizers often question certain pairings. Here are the most common situations and the algorithmic reason behind each one.

"Player X has 3 points but is paired against someone with only 2.5"

This happens when the 3.0-point group has an odd number of players and someone must downfloat. The algorithm tried every combination within the 3.0 group but found that all possible pairings violate C1, C2, or C5 (e.g., all 3.0-point players have already played each other, or have severe color conflicts). Downfloating one player to the 2.5 group was the only valid option.

"Player X always gets Black"

When a player downfloats, they often must accept a color they wouldn't normally receive, because the pairing in the lower group requires it. This is a known limitation of the Swiss system — the color balance constraint has lower priority than C1–C5, so it can be overridden.

"Why are the top two players paired in round 4 already?"

If both leaders have the same score, and the algorithm finds no other valid pairing within their score group (all other players in that group have either already played them, or have conflicting color rights), the algorithm pairs the top two against each other. This is correct behavior — the criteria hierarchy requires it.

Other approved systems: Burstein, Baku Acceleration

Burstein System (C.04.4)

The Burstein system is a variant of the Dutch system with a different approach to score group formation. Instead of strict score groups with floaters, it allows more flexible cross-group pairings while maintaining rating proximity within pairs. It's less commonly used in FIDE-rated events but is recognized as an alternative.

§ FIDE C.04.4 — Burstein System (effective 1 Feb 2026). → Read C.04.4

Baku Acceleration (C.04.7)

Baku Acceleration is used in very large Swiss tournaments (typically 200+ players) to ensure that the top players face each other earlier, rather than meeting only in the final rounds after winning several easy games against weak opposition.

The idea: in the first few rounds, the top-rated players are given a "virtual" half-point head start, which places them in a higher score group than their actual score. This creates earlier confrontations between strong players. From round 3 or 4 onward, the virtual points are removed and normal Swiss pairing resumes.

§ FIDE C.04.7 — Accelerated Systems: Baku Acceleration (effective 1 Feb 2026). → Read C.04.7

Reading a TRF file

The TRF (Tournament Report File) is the standard exchange format for chess tournament data. ChessPairings.org exports both TRF-16 (legacy) and TRF-25 (new 2025 format). Here's what a TRF-16 file looks like for our Alekhin Memorial after Round 1:

012 Alekhin Memorial Open
022 Club Room, Alessandria
032 2026-03-03
042 2026-03-03
052 Mikhail (Chief Arbiter)
062 5
072 1
082 Rapid
092 15+10
132 Buchholz Cut-1, Buchholz, Wins, Direct Encounter
001  No  Name              Rtg  FID       Pts  R1
001    1 Fischer           2200 1234567   1.0  0000 W  5 1
001    2 Kasparov          2180 2345678   1.0  0000 W  6 1
001    3 Tal               2150 3456789   1.0  0000 W  7 1
001    4 Petrosian         2120 4567890   1.0  0000 W  8 1
001    5 Spassky           2080 5678901   0.0  0000 B  1 0
001    6 Karpov            2050 6789012   0.0  0000 B  2 0
001    7 Botvinnik         1990 7890123   0.0  0000 B  3 0
001    8 Lasker            1960 8901234   0.0  0000 B  4 0

Each 001 line is one player. Reading left to right: player number, name, rating, FIDE ID, total score, then for each round: starting rank (0000 = not applicable), color (W/B), opponent number, result (1 = win, 0 = loss, = = draw, H = half-point bye, F = forfeit win).

You never need to edit this file manually — ChessPairings.org generates it automatically. But knowing how to read it helps when verifying results or importing into other software.

bbpPairings: the engine behind ChessPairings.org

ChessPairings.org uses bbpPairings as its Swiss pairing engine — an open-source, C++ implementation of the FIDE Dutch system maintained by the chess programming community. bbpPairings is used by multiple national federations and tournament management systems worldwide.

For tiebreak calculations, ChessPairings.org uses a dedicated TieBreakServer module (Python), which implements all 28 supported tiebreak systems independently of the pairing engine. This separation ensures that pairing and tiebreak logic are each independently verifiable.

Both engines are updated whenever FIDE revises its rules — the February 2026 rule changes are fully reflected in the current version of ChessPairings.org.

For the technically curious

The Dutch pairing problem is mathematically equivalent to a weighted maximum matching problem in graph theory. Each potential pairing is an edge with a weight representing how well it satisfies the criteria hierarchy. The algorithm finds the maximum-weight perfect matching — which is why it can take a fraction of a second even for 500-player tournaments.

Pronto para Organizar Seu Torneio?

Emparelhamento suíço conforme FIDE 2026, 28 sistemas de desempate, completamente gratuito.

Criar Conta Gratuita