Witam
Mam drobny problem z uproszczeniem rekurencji w postaci
bool LimitedDFS(Hex* hex, float cost, float limit)
{
if(cost > limit || hex == NULL)
return false;
if(cost < limit)
{
hex->enableFlags(eHF_MOVE_AVAILABLE);
for(int i=0; i<6; i++)
{
LimitedDFS(hex->getNeighbour(i), cost + hex->calcTraverseCost(), limit);
}
}
}
Metoda calcTraverseCost() wyznacza koszt ruchu (a raczej karę za przejście tego hexa) uwzględniając tylko 6 sąsiadów hexa ( koszt przejścia może być 1.0 - standardowo, 2.0 lub 3.0 jeśli np na heksie jest jakaś przeszkoda - 2.0 albo 3.0 w zależności od jej rodzaju )
Generalnie problem jest taki, że w przypadku gdy limit wynosi 10 ( czyli badamy ruch w odległości 10 heksów od źródła to przeszukiwanie tego to jest grubo kilkadziesiąt milionów przebiegów.
Agorytm jest potrzebny do znalezienia wszystkich możliwych hexów w zasięgu ruchu ( limit ). Mógłbym zastosować A* i badać wszystkie możliwe heksy ale to jest także mało racjonalne rozwiązanie ( dla ruchu 10 heksów będzie do przeszukania 400 heksów co także jest niedopuszczalne obliczeniowo). Jakieś wskazówki ktoś byłby uprzejmy podać ?