если кто - нибудь в курсе можете объяснить за чем нужны closed и open списки, как оин используются
В волновом алгоритме узлы делятся на 3 группы:
1. узлы в которых мы еще не бывали (белые)
2. узлы в которых уже побывали но обошли не всех потомков (серые)
3. узлы все потомки которых уже обошли - обработанные (черные)
Для работы потребуется очередь:
- очередь серых узлов (очередь обработки)
Принцип работы алгоритма:
1. Начало{
- заходим в белый узел
- помечаем его серым и добавляем в очередь
2. Основной цикл )пока очередь не пуста:{
- выбираем узел из очереди )если это целевой узел выходим из цикла:
- помечаем всех белых потомков серым, указываем что предок - текущий узел, добавляем в очередь
- метим узел черным
3. Результат{
- получили список предшествования по которому строим кратчайший путь )целевой узел знает своего предка и т.д. до стартового узла:
Так ищется кратчайший путь в невзвешенном графе
Для взвешенного графа алгоритм нужно немного изменить, появляется стоимость пути и меняется основной цикл:
- выбираем узел из очереди )если это целевой узел выходим из цикла:
- обходим всех потомков )включая серые и черные:{
- белые метим серым, предок - текущий узел, в очередь
- для серых и черных если стоимость пути из текущего узла меньше{ предок - текущий узел
- метим узел черным
Алгоритм А* отличается тем, что для выбора порядка обхода вершин используется эвристика и стоимость считается как сумма пройденного пути и эвристики.
Для этого в качестве очереди обрабатываемых узлов используется очередь с приоритетами и немного меняется основной цикл алгоритма:
- выбираем узел из очереди )если это целевой узел выходим из цикла:
- обходим всех потомков )включая серые и черные:{
- белые метим серым, предок - текущий узел, в очередь
- для серых если стоимость пути из текущего узла меньше{ предок - текущий узел
- для черных если стоимость пути из текущего узла меньше{ предок - текущий узел,
метим серым и в очередь )если эвристика зависит от того, как мы в этот узел пришли:
- метим узел черным
В твоем примере Open это очередь серых узлов, Closed - очередь черных