Algorytm znajdowania drogi

0

Witam
mam taki problem mianowicie robie prostą gierke potrzeba mi przesuzkac
cała tablice dwuwymiarowa (PLANSZA) by odnaleźć droge (o ile istnieje) z punktu A do B ruch odbywa się tylko przód,tył,lewo,prawo
w tablicy są oczywiscie w różnych polach przeszkody przez które nie wolno przechodzić no i mam kłopot zastanawiałem się nad rekurencją ale nie wiem do końca jaki wymyślić algorytm już były 3 podejscia do problemu ale poległem :\

myślałem teżżeby algorytm znajdował najkrótszą trasę ale to też mi się nie udało
próbowałem robić tak:

wypełniałem tablicę liczbami np.
w okół punktu A(lewo,prawo,góra,dół) jeśli można wstawić wstaw 1
w okół 1 wstaw jeśli mozna 2,
itd... aż do punktu B
pózniej przeszukaj w okół punktu B i znajdź najmniejszą liczbę i teraz idź przeszukując cały czas szukając o jeden mniejszą aż do A jak dojdziesz to ok mamy trasę i dojscie,

tu pseudo obrazek: tam gdzie 0 to znaczy że jest przeszkoda

tablica:

0   1   2   3   4   5   6 
__________________

0?0 2 3 4 5 ???
1?A 1 2 3 4
2?1 2 3 4 5
3?2 0 4 5 0 0 0
4?0 0 0 6 7 8 9
5?0 0 8 7 8 B 10
6?

no i własnie sprawa się komlikuje bo nachodzą na siebie niektóre drogi przejscia
jak to uwzglednić by było dobrze które pierwsze rozpatrywać
a może macie jakieś inne pomysły na rozpatrzenie tego problemu

0

Odpowiedzią jest algorytm A* (czyt. "A star") - gwarantuje on znalezienie optymalnej drogi (o ile w ogóle jakaś istnieje) na planszy 2D.
Na http://gamasutra.com widziałem kiedyś super artykuł doskonale tłumaczący to rozwiązanie.

Ma jeszcze tę zaletę, że uznaje wagi i kary.

Np. można dać karę za skręt - dzięki temu bardziej proste trasy będą uznane za lepsze (dobre do gier, gdzie porusza się pojazd, który wymaga czasu na rozpędzenie się i hamowanie przy zakrętach).

Wagi można wykorzystać jeśli nasz teren jest np. górzysty - im bardziej strome zbocze, tym większa waga - przeto trasa będzie się starała iść równym poziomem a nie skakać po górach i dolinach (na których często w grach wolniej poruszają się pojazdy/ludziki).

Lightwave3D Rulez :)
3ds max rulez :P

0

ehh a coś po polskiemu nie ma albo może ktoś sie podzieli swoimi spostrzeżeniami bo nie wierzę że nikt tego nie robił.

Lightwave Lightwave Lightwave Lightwave Lightwave Lightwave Lightwave [green]

0

a jednak

http://warsztat.mmogspot.pl/forum/kb.php?mode=article&k=114&sid=8c19b8480c9f753c1d49b76037808af3

//do linków używaj <url> a nie <code> bo rozwalasz stronę - M

0

ok udało mi się to napisać tablica ładnie wypełnia się kolejnymi liczbami i gotowa jest do szukania drogi ale mam pewien problem, w tym projekcie który piszę chodzenie musi dokonywać się lewo,prawo,góra, dól a po ukosach nie,
algorytm działa swietnie ale tylko i wyłącznie bedzie działał prawidłowo przy chodzeniu we wszystkie strony,

jak to teraz zmienić ?? trzeba przeszukać wszystkie możliwe ścieżki ?
nie mam pomysłu

0

Sam niedawn napisalem taki program ktory znajduje rozwiazanie w labiryncie wczytanym z pliku tekstowego, i chodzenie odbywa sie w prawo, lewo, gora,dol. Labirynt wypelnia sie znakami, ale to chyba nie jest problem bo wpisywane sa w kolejnosci zgodnej z ASCII.
Program troche zajmuje wiec najlepiej podaj maila to ci wysle jak bedziesz chciala.
Jesli nadal jestes chetna na ten pliczek to odpisz.
Aha, progs jest napisany w C++.
Pozdro

0

bardzo chętnie bym go przejrzał, jeśli można
to na: ferkaluk@ferkaluk.vel.pl

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.