Advertisement
hibbzboi

Untitled

Jun 4th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. vector<Punkt*> AStar(Punkt* start, Punkt* stop) {
  2.  
  3.     vector<Punkt*> listaOtwarta;
  4.     vector<Punkt*> listaZamknieta;
  5.  
  6.     listaOtwarta.push_back(start);
  7.     listaWszystkichPunktow[start->x][start->y].x = start->x;
  8.     listaWszystkichPunktow[start->x][start->y].y = start->y;
  9.     listaWszystkichPunktow[start->x][start->y].g = start->g;
  10.     listaWszystkichPunktow[start->x][start->y].h = start->h;
  11.     listaWszystkichPunktow[start->x][start->y].f = start->f;
  12.     listaWszystkichPunktow[start->x][start->y].rodzic = start->rodzic;
  13.  
  14.     while (listaOtwarta.size() > 0)
  15.     {
  16.         Punkt* q = listaOtwarta.front();
  17.  
  18.         for (int i = 0; i < listaOtwarta.size(); i++) {
  19.             if (listaOtwarta[i]->f < q->f)
  20.             {
  21.                 q = listaOtwarta[i];
  22.             }
  23.         }
  24.  
  25.         listaOtwarta.erase(remove(listaOtwarta.begin(), listaOtwarta.end(), q), listaOtwarta.end());
  26.  
  27.         vector<Punkt> dzieci = GenerowanieDzieci(q);
  28.  
  29.         for (int i = 0; i < dzieci.size(); i++)
  30.         {
  31.  
  32.             if (dzieci[i].x == stop->x && dzieci[i].y == stop->y) {
  33.                 listaZamknieta.push_back(q);
  34.                 listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic = dzieci[i].rodzic;
  35.                 stop->rodzic = listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic;
  36.                 listaZamknieta.push_back(stop);
  37.                 goto skok2;
  38.             }
  39.  
  40.             dzieci[i].g = q->g + 1;
  41.             dzieci[i].h = MetrykaEuklidesowa(&dzieci[i], stop);
  42.             dzieci[i].f = dzieci[i].g + dzieci[i].h;
  43.  
  44.             for (int j = 0; j < listaOtwarta.size(); j++) {
  45.  
  46.                 if (listaOtwarta[j]->x == dzieci[i].x && listaOtwarta[j]->y == dzieci[i].y && listaOtwarta[j]->f < dzieci[i].f) {
  47.                     goto skok;
  48.                 }
  49.             }
  50.  
  51.             for (int j = 0; j < listaZamknieta.size(); j++) {
  52.  
  53.                 if (listaZamknieta[j]->x == dzieci[i].x && listaZamknieta[j]->y == dzieci[i].y && listaZamknieta[j]->f < dzieci[i].f) {
  54.                     goto skok;
  55.                 }
  56.             }
  57.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].x = dzieci[i].x;
  58.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].y = dzieci[i].y;
  59.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].f = dzieci[i].f;
  60.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].g = dzieci[i].g;
  61.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].h = dzieci[i].h;
  62.             listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic = dzieci[i].rodzic;
  63.             listaOtwarta.push_back(&listaWszystkichPunktow[dzieci[i].x][dzieci[i].y]);
  64.         skok:;
  65.         }
  66.         listaZamknieta.push_back(q);
  67.     }skok2:;
  68.  
  69.     return listaZamknieta;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement