Portfolio
Algoritmy v praxi: Knights Travails

Algoritmy v praxi: Knights Travails

Únor 2026

Úkolem bylo najít nejkratší cestu šachového koně mezi dvěma pozicemi na šachovnici. Projekt prakticky spojil grafy, frontu a BFS.

Šachovnice je v tomto modelu graf: pole jsou uzly a legální tahy koně jsou hrany.

Protože hledáme nejkratší cestu v neohodnoceném grafu, správná volba je BFS. Algoritmus postupuje po vrstvách a při prvním zásahu cíle vrací optimální počet tahů.

Klíčové části řešení:

  • fronta (queue) pro BFS,
  • množina navštívených pozic (visited),
  • ukládání cesty spolu s aktuální pozicí.

Tady je srdce mého algoritmu:

findShortestPath() {
    const queue = []; // Fronta pro BFS
    const visited = new Set(); // Abychom nechodili v kruhu

    // Do fronty ukládám nejen pozici, ale i celou historii cesty
    queue.push({ position: this.start, path: [this.start] });
    visited.add(this.start.toString());

    while (queue.length) {
        const { position, path } = queue.shift(); // FIFO - vezmi prvního

        // Jsme v cíli? Vrať cestu!
        if (position.toString() === this.end.toString()) return path;

        // Generuj možné tahy koně
        new GameBoard()
            .getKnightMoves(position)
            .filter((move) => !visited.has(move.toString()))
            .forEach((move) => {
                queue.push({ position: move, path: [...path, move] });
                visited.add(move.toString());
            });
    }
}

Co jsem si odnesl

  • Jistotu v použití BFS na praktickém problému.
  • Lepší práci s reprezentací cesty během průchodu grafem.
  • Potvrzení, že správná volba datové struktury rozhoduje o jednoduchosti řešení.

GitHub: projekt Knights Travails