Изменения

Перейти к: навигация, поиск

Алгоритм A*

93 байта убрано, 12:44, 28 февраля 2012
Псевдокод
[[Файл:Astar_progress_animation.gif|thumb|right|Пример работы А*. Пустые кружки принадлежат к открытому списку, а окрашенные к закрытому.]]
void A*(start,goal)
{
closed := {}; // Множество вершин расстояние до которых мы уже оценили
open.push(start);// Очередь с приоритетом
parent[start] = start;
while (open.size() != 0)
{
x := open.pop();
if (x == goal)
closed.push(x);
for (y : xy in E)
{
if (y in closed)
continue;
tmp := g[x] + d[x,y] // Стоимость пути до y через х
if (y not in open)
{
open.push(y);
tentative_is_better = true;
}
else
if (tmp < g[y]) // можно улучшить расстояние до y
else
tentative_is_better = false
if (tentative_is_better == true) // найден новый, более короткий путь до y {
parent[y] = x;
g[y] = tmp;
f[y] = g[y] + h[y]; } } }
return failure; // Наша цель недостижима из start
}
==Свойства==
===Корректность===
Анонимный участник

Навигация