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.

  1. 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.
  2. 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.
  3. Attól a ponttól listát a kiválasztott pont a legkisebb F. Let it X.
  4. Ha X - célja, megtaláltuk az útvonal.
  5. Transzfer az X a listából a folyamatban lévő ügyek a listában a már megvizsgált.
  6. Az egyes szomszédos pontok X (jelölésük az szomszédos pont Y), tegye a következőket:
  7. Ha Y már megfontolás - kihagyom.
  8. 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.
  9. Ha Y a listán megfontolásra - ellenőrzi, hogy X.G + távolság X Y
  10. 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:

Végrehajtása keresési algoritmusok és c #

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?

Kapcsolódó cikkek