Végrehajtása keresési algoritmusok és c #
Megtaláljuk a módját pontból a B pont - az egyik leggyakoribb feladat, amikor a fejlődő játékok. Hogy oldja meg ezt a problémát, sok algoritmus, de a leggyakrabban használt az A * (A csillag). Ő szentelt mai bejegyzésben.
- Létrehozta 2 A lista élén - a folyamatban lévő és a már tárgyalt. A várakozás hozzáadjuk a kiindulási pont, a lista üres eddig venni.
- Számított minden egyes pontja F = G + H. G - a távolság a kezdete, hogy a pont, H - hozzávetőleges távolság pont a cél. A számítás ez az érték, fogok beszélni később. Valamint, minden ponton tárolja utalás a pont, ahonnan ez jött.
- Attól a ponttól listát a kiválasztott pont a legkisebb F. Let it X.
- Ha X - célja, megtaláltuk az útvonal.
- Transzfer az X a listából a folyamatban lévő ügyek a listában a már megvizsgált.
- Az egyes szomszédos pontok X (jelölésük az szomszédos pont Y), tegye a következőket:
- Ha Y már megfontolás - kihagyom.
- Ha az Y még nem szerepel a várakozási - add vissza, ne feledje hivatkozásokat a X. és kiszámításának Y.G (X.G + a távolság X Y) és Y. H.
- Ha Y a listán megfontolásra - ellenőrzi, hogy X.G + távolság X Y
- Ha a pontok listáját az üres és a cél, amit még soha nem érte el -, akkor az útvonal nem létezik.
Funkció értékelése a hozzávetőleges távolság a cél.
Ez a funkció teljesítenie kell több feltételt:
- A funkció nem túlbecsüli a távolság a cél.
- Mert ez a távolság függvényében, a háromszög-egyenlőtlenség. Azt fogja magyarázni többet: Tegyük fel, hogy három szempontból - az A, B és C utak A-B B-C és A-C igaznak kell lennie alábbi egyenlőtlenséget: A-B + B-C> = A-C.
Megvalósítás.
Azt végre egy algoritmust négyszögletes kártya, amely a sejtek.
A kezdéshez hozzon létre egy osztályt pont:
Továbbra is hozzá néhány hasznos függvényt.
Az első közülük - függvényében a távolság X Y:
A távolság a szomszédos sejtek én mindig 1.
Funkció közelítő becslések a távolság a cél:
Megbecsülni a távolságot használom a hossza a pálya akadályok nélkül.
Megszerzése szomszéd lista a lényeg:
útvonal átvételét. Route képviseli, mint egy listát a pont koordinátái.
Ez az oka annak, hogy megtartottuk a viszonyítási pont, ahonnan ez jött.
Megváltoztatni az algoritmus egy másik módja a bemutató a pontok (pl távolságok a városok közötti grafikon), akkor meg kell változtatni egyre szomszédok és számítása távolságok.
Ez az, ami végül történt:
Mellesleg négyzetek már tudja, hogyan kell járni, és harcolni :-)
Funkció közelítő becslések a távolság a cél:
1
2
3
4private static int GetHeuristicPathLength (Point re, Point)
vissza Math.Abs (from.X - to.X) + Math.Abs (from.Y - to.Y);
>
A hibát barátom. látszólag egy geometria nagyon rossz. A legkisebb útvonal egy útvonal egy egyenes vonal
private static int GetHeuristicPathLength (Point re, Point)
var DeltaX = Math.Abs (from.X - to.X);
var DeltaY = Math.Abs (from.Y - to.Y);
var Dist = Math.sqrt (DeltaX * DeltaX + DeltaY * DeltaY);
és ahol a forráskód?