Главная arrow С++ (часть 2) arrow Поиск методом наименьшей стоимости

Поиск методом наименьшей стоимости

Метод наименьшей стоимости (least-cost search) противоположен методу вое. хождения на гору. Представьте себе, что вы на роликовых коньках стоите на склоне высокого холма на середине улицы и чувствуете со всей определенностью, что спускаться гораздо легче, чем карабкаться вверх. Это и есть стратегия метода наименьшей стоимости. Другими словами, описываемый метод выбирает путь наименьшего сопротивления.
Применение метода наименьшей стоимости в задаче поиска маршрута означает, что всегда выбирается самый короткий рейс, и, следовательно, у найденного маршрута большие шансы оказаться самым коротким. В отличие от метода восхождения на гору, минимизирующего число пересадок, поиск методом наименьшей стоимости пытается минимизировать количество миль. Для применения этого метода вы должны изменить функцию find о следующим образом.
const int MAXDIST = 100000;
// Версия для метода наименьшей стоимости.
// При заданном from находит самый короткий рейс из from.
// Возвращает true, если рейс найден,
//и false — в противном случае.
bool Search::find(string from, Flightlnfo &f)
{
int pos = -1;
int dist = MAXDIST; // длиннее, чем самый длинный рейс
for(unsigned i=0; i < flights.size(); i++)  (
if(flights[i].from == from && !flights[i].skip)  { // Использует самый короткий рейс, if(flights[i].distance < dist)  { pos = i;
dist = flights[i].distance;
}
}
}
if(pos != -1)  { f = flights[pos];
flights[pos].skip = true; // предотвращает повторное использование return true;
)
return false;
)
При использовании приведенной версии функции find о получено следующее решение, prom? New York •Го? Los Angeles
щей York to Toronto to Los Angeles Distance is 3000
Как видите, найден хороший маршрут — не лучший, но приемлемый. На рис. 7.11 показан найденный методом наименьшей стоимости путь, ведущий к цели.
 
стоимость авиабилетов в польгу, гостиницы симеиза, снять торговое место