Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<Punkt*> AStar(Punkt* start, Punkt* stop) {
- vector<Punkt*> listaOtwarta;
- vector<Punkt*> listaZamknieta;
- listaOtwarta.push_back(start);
- listaWszystkichPunktow[start->x][start->y].x = start->x;
- listaWszystkichPunktow[start->x][start->y].y = start->y;
- listaWszystkichPunktow[start->x][start->y].g = start->g;
- listaWszystkichPunktow[start->x][start->y].h = start->h;
- listaWszystkichPunktow[start->x][start->y].f = start->f;
- listaWszystkichPunktow[start->x][start->y].rodzic = start->rodzic;
- while (listaOtwarta.size() > 0)
- {
- Punkt* q = listaOtwarta.front();
- for (int i = 0; i < listaOtwarta.size(); i++) {
- if (listaOtwarta[i]->f < q->f)
- {
- q = listaOtwarta[i];
- }
- }
- listaOtwarta.erase(remove(listaOtwarta.begin(), listaOtwarta.end(), q), listaOtwarta.end());
- vector<Punkt> dzieci = GenerowanieDzieci(q);
- for (int i = 0; i < dzieci.size(); i++)
- {
- if (dzieci[i].x == stop->x && dzieci[i].y == stop->y) {
- listaZamknieta.push_back(q);
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic = dzieci[i].rodzic;
- stop->rodzic = listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic;
- listaZamknieta.push_back(stop);
- goto skok2;
- }
- dzieci[i].g = q->g + 1;
- dzieci[i].h = MetrykaEuklidesowa(&dzieci[i], stop);
- dzieci[i].f = dzieci[i].g + dzieci[i].h;
- for (int j = 0; j < listaOtwarta.size(); j++) {
- if (listaOtwarta[j]->x == dzieci[i].x && listaOtwarta[j]->y == dzieci[i].y && listaOtwarta[j]->f < dzieci[i].f) {
- goto skok;
- }
- }
- for (int j = 0; j < listaZamknieta.size(); j++) {
- if (listaZamknieta[j]->x == dzieci[i].x && listaZamknieta[j]->y == dzieci[i].y && listaZamknieta[j]->f < dzieci[i].f) {
- goto skok;
- }
- }
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].x = dzieci[i].x;
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].y = dzieci[i].y;
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].f = dzieci[i].f;
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].g = dzieci[i].g;
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].h = dzieci[i].h;
- listaWszystkichPunktow[dzieci[i].x][dzieci[i].y].rodzic = dzieci[i].rodzic;
- listaOtwarta.push_back(&listaWszystkichPunktow[dzieci[i].x][dzieci[i].y]);
- skok:;
- }
- listaZamknieta.push_back(q);
- }skok2:;
- return listaZamknieta;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement