Üdv,
Köszönöm geco, szívesen elolvasgatok errefelé. Nem felejtettem el, sőt dolgozom is a problémán. A gond nagyon egyszerű, de még nem látom, hogyan tudom megoldani.
Lényeg:
Nem memória-spórolás okán hiányzik a jobbra és lefelé irányuló zsákutca, hanem ezek nem jöhetnének létre, de sajnos az algoritmus ezt jelenleg magában hordozza.
A programozó szerette volna, ha a város térképe nem egy sima mindenhonnan-mindenhova vezető úthálózat, hanem lennének benne elágazások, zsákutcák is, sőt ezekre kifejezetten szükség is van a kiindulási pont vagy az árufelvevő helyek miatt. Egyben azt is meg akarta valósítani, hogy ne előre letárolt térképek legyenek, hanem legyen bennük véletlenszerűség. És itt elkövetett egy kis hibát.
Arra gondolt, hogy először is vesz egy üres térképet.
Aztán beleszór "találomra" néhány zsákutcát, egyenes utat és kanyart.
Utána végighalad és az üresen maradt helyekre kanyarokat, 3-as vagy 4-es kereszteződéseket tesz véletlenszerűen, de közben figyelve az összekötésekre, ha pedig más kiút nincs, zsákutca kerül az adott helyre.
Ezzel már dörzsölte is kezét, kész a szuper térkép.
No, ha a Fred labirintus-tervezője így állt volna a kérdéshez, akkor bizony sokszor ragadtunk volna a piramis belsejében, de ő okosabb és jobb algoritmust alkotott.
Hol a hiba ?
Elvben bárhol létrejöhet, de legegyszerűbb, ha arra gondolunk, tegyünk egy felfelé zsákutcát a 2. sor végére. E fölé nem lehet semmit tenni, kizárólag egy jobbra zsákutcát, vagyis azt, ami nincs. Puff neki, ennyi. Ugyanígy járhatunk a bal alsó saroknál is.
Mivel nem minden kanyar, kereszteződés, zsákutca tartozik az eszköztárba - például fentről-jobbra kanyarodó kanyar nincs - így elképzelhető, hogy ha úgy módosítom az algoritmust, hogy ne jöhessen létre beszoruló, nemlétező zsákutca, akkor megoldható a baj. Ha ezt nem tudom matematikailag - vagy algoritmusilag - bizonyítani, akkor csak úgy lehet javítani, ha megrajzolom a 2 hiányzó zsákutcát. Ez jelenleg azért nehéz, mert a térképelemek kódjaiból számítja ki a memóriában az elem felépítését és a szükséges helyen lehet, hogy más pihen. Ha csak ez maradna a megoldás, sok munka lesz, tehát drukkolok, hogy megtaláljam a zsákutca feloldó átjáróházat
Megoldás, hogy a tervezés végén egy sima ellenőrzés kell és ha hiba van, akkor újratervezés, de ehhez pedig szabad memória kell - igaz csak kevés byte. Ezt nem szeretem csak úgy betenni a programba, mert soha nem lehet tudni, hogy egy üresnek látszó rész mikor és mire kell. Ehhez a teljes visszafejtés szükséges, ami ....
Jelentkezem később.
Pgyuri