Bypass sakk lovag ellátás

Egy kissé eltérő megvalósítási mód az absztrakt válogatás áramkört a visszatérő lehet alkalmazni más, ismert probléma áthaladó ló sakktábla mérete N „n. Azt feltételezzük, hogy a sorok és oszlopok vannak számozva megfelelően tábla fentről lefelé és balról jobbra a számokat 0-tól n - 1, és a ló mozog a tábla körül szerint a szokásos sakk szabályait. Keresse kerek tábla egy speciális területén - azt jelenti, hogy kap egy szekvencia pozíciók mozgó lovat úgy, hogy minden mező náluk csak egyszer. A lemezek 8 „8 A probléma első által felvetett Euler.

Adachi 4. Bypass ló fórumon. A sakktábla mérete N „n pozícióban (x, y) egy ló (lásd. 2. ábra). Hozzon létre egy rekurzív program funkcióit módszerével visszalépés megkerülve ló ellátás, ha létezik. Ha nincs bejárás kell adni a megfelelő üzenetet.

Határozat. A 2. ábra egy töredéke a fedélzeten. K ló áll a helyzet (x, y). A sejteket a számok körül K - egy területet, amelyre a Knight átléphet a (x, y) (0 £ x, y £ n - 1) egy körben. Több ilyen mezők jelöli M (x, y). Egy rögzített területen (x, y) több M (x, y) tartalmazhat két évtől nyolc elem. Próbálja meg rendezni ezeket a csomagokat. Tekintsük a kisegítő mátrix lépésekben:

Egy mező (x, y), hogy össze egy szekvenciát mezők

és választja ki azokat, amelyek esetében

Ábra. 2. A rendszer a rendelés több lehetséges lépések ló

Ezek a területek jelentik, és több M (x, y). Minden elem (a, b) Î M (x, y) rendelje hozzá a k szám oszlop D. elemek, összhangban (2) - (3) meghatározza a tengelyek inkrementális elmozdulásai ló (x, y) az (a, b). Így lehetséges ló mozog (x, y) annak érdekében, hogy a számok általuk kapott. A 2. ábrán ezek a számok kerülnek a megfelelő cellákba. Megjegyezzük, hogy más változatai D. és mindegyiket 8! = 40320, hogy más módon rendelési M (x, y).

Megoldásával a feladatot az általános rendszerben 3 visszalépés, mi következetesen létrehoz egy vektor n hosszúságú 2. Célszerű a konstrukció nem egy vektort, és méretű mátrix n „n. megjegyezve cellájában szám lovag mozog egy és legfeljebb n 2. Ezt megteheti a segítségével main () és Ktour () függvényt.

Paraméterek Szülő funkció fő (n, x, y) - a méret a tábla (n) és a kiindulási pont (x, y), amely elindítja mozgó lovat. A fő () által kezdeményezett nullák tábla méretű mátrix H n „és n az első lépést végezzük. További kezelés végrehajtása a rekurzív Ktour () függvény, majd kiszámítjuk a H mátrix származik egy teljes kör ló, vagy egy üzenetet nem megoldásokat.

Paraméterek rekurzív Ktour funkció (n, x, y, H, Boo, j) - a méret a tábla (n), (x, y), amellyel a rendes ló fedélzeten (H), a mélysége rekurzív hívások (j) és a kisegítő variábilis bú. Ktour () függvény az aktuális értéket H mátrix és bú. amely egyenlő nulla vagy egy, attól függően, hogy nem tudja folytatni a lovagi lépés a jelenlegi rekurzív hívást.

Minden rekurzív hívás mélység j egy kísérlet, hogy helyezze a ló a következő j-edik mező a tábla. A pozíció, ahonnan a ló nem mozog tovább, nevezzük egy zsákutca. Zsákutcába vezet a befejezése után a rekurzív hívás, akkor visszatérhet az előző mezőre, és továbbra is dolgozni vele. Egyébként teljes rekurzív hívások nem léteznek. Ezért a bázis rekurzió, mint az 1. feladat, meg kell vizsgálni az összessége holtpontok. Alapelemek előre ismert számításokat. Ha a következő rekurzív hívás támogatása ló felszabadítással (bú = 1), akkor megy a következő rekurzív hívást. Ha lehetséges, hogy támogassák a ló utolsó üres cella a N. végzett egymást követő visszatér az első rekurzív szinten (j = 0), és visszaadja az oldatot (H). Ha végzett a visszatérés az első szintet, amikor rekurzív üres fedélzeten, és ezen a szinten már kipróbált minden érvényes mozog, akkor az üzenetet hiányában megoldásokat.

Megjegyzés. Kísérletek hogy megoldja a problémát 2, ha n ³ 8 main () program és a Ktour (), végre a nyelvén Mathcad szoftver. nehézségekbe ütköznek társított memória hiánya, vagy időtartama a számítás. Ez nem segít, és a programok megvalósításának minden programozási nyelv fordítás típusát. Enyhe gyorsulás számítások nyújthat átmenetet a nem-rekurzív kiviteli alak Ktour () függvény. Ezért, hogy megoldja a problémát 2, még a normál sakktábla (n = 8) igényel semmilyen más megközelítéseket. Egyikük lesz szó a következő részben.

Kapcsolódó cikkek