Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az S. 55. feladat (2010. szeptember)

S. 55. Közismert, hogy egy huszárral be tudjuk járni a sakktábla összes mezőjét úgy, hogy minden mezőt pontosan egyszer érintünk. Erre könnyen megjegyezhető, egyszerű algoritmus áll rendelkezésre. A megoldandó feladat most ennél bonyolultabb. Az első néhány lépést már megtették helyettünk.

Írjunk programot, amely megkeresi a megkezdett út leghosszabb folytatását. A program első parancssori paramétere az eddigi utat tartalmazó fájl neve, a második parancssori paraméter pedig az út folytatását tartalmazó fájl neve. Mindkét fájl ugyanolyan szerkezetű, az első sor tartalmazza a tárolt lépések (L) számát, a második sorban pedig az érintett L darab mező következik egymástól egy-egy szóközzel elválasztva, a lépések sorrendjében.

6
A1 B3 C1 A2 B4 C2

[] A sakktábla mérete 6×6, a mezők jelölése a játékban megszokottnak megfelelő.

[] A bemeneti fájl utolsó felsorolt mezője és a kimeneti fájl első mezője egyezik.

[] Ha az út nem folytatható, akkor az első sorba az 1 kerüljön, a másodikba pedig az a mező, ahol a huszár éppen áll.

Beküldendő a feladat megoldását tartalmazó forrás és projektállományok (az .exe és más a fordító által generált kiegészítő állományok nélkül), valamint a megoldás menetét röviden bemutató dokumentáció (s55.txt, s55.pdf, ...) egy tömörített mappában (s55.zip).

(10 pont)

A beküldési határidő 2010. október 11-én LEJÁRT.


A beküldők többsége helyesen ismerte fel, hogy a backtrack algoritmust kell használni a megoldáshoz, mivel a maximális lépésszámot kerestük. A lényeg dióhéjban: - az eddig bejárt mezőket foglaltnak jelöljük - az utolsó pozícióból megpróbálunk továbblépni (a lehetséges "irányokkal" rögzített sorrendben próbálkozunk) - ha egy adott pozícióból nem vezet tovább út, akkor - ha a hozzá tartozó lépésszám maximális - az utat mentjük és visszalépünk az előző mezőre, ahonnan a következő iránnyal próbálkozunk. - a program befejeződik az összes lehetséges út bejárásakor, valamint akkor is, ha találtunk egy 36 lépés hosszú utat.

Sokan a kódolást is hiba nélkül végezték, a legtöbb program a legtöbb tesztesetre egy-két másodperc alatt lefutott.

A következő teszteseteket használtuk az értékelés során:

- csak egy mezőn jártunk (be1) - 6 mezőt érintettünk, a tábla teljesen bejárható (be8) - 18 mezőt érintettünk, a tábla teljesen bejárható (be3)

- a táblát teljesen bejártuk, nincs továbblépésre mód (be2) - az út nem folytatható (be6)

- 12 mezőt érintettünk, a tábla nem járható be, de folytatható (be5) - 18 mezőt érintettünk, a tábla nem járható be, de folytatható (be4) - 25 mezőt érintettünk, a tábla nem járható be, de folytatható (be7)

A tesztesetek: s55teszt.zip

Sok hibátlanul működő megoldás született, az egyik legtömörebb megoldást Boros Zalán adta: s55borsos.cpp

Egy lehetséges kimenet: s55kimenet.zip


Statisztika:

17 dolgozat érkezett.
10 pontot kapott:Adrián Patrik, Barta 111 János, Borsos 607 Zalán, Fekete 976 János, Mihálykó András, Nagy 111 Miklós.
9 pontot kapott:Élő Dániel, Nagy Róbert, Paczolay Gábor, Weisz Gellért.
8 pontot kapott:2 versenyző.
7 pontot kapott:1 versenyző.
6 pontot kapott:1 versenyző.
4 pontot kapott:1 versenyző.
1 pontot kapott:1 versenyző.
0 pontot kapott:1 versenyző.

A KöMaL 2010. szeptemberi informatika feladatai