Описание алгоритма

This commit is contained in:
2025-03-31 19:00:32 +03:00
parent ecc7c3ed61
commit 970ec196ee
6 changed files with 46 additions and 0 deletions

BIN
report/img/first-step.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
report/img/fon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
report/img/last-step.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
report/img/reverse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
report/img/third-step.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -492,6 +492,52 @@ K40. Ниже приведены вычислительные возможнос
\end{itemize}
\newpage
\section{Алгоритм решения задачи}
Для решения задачи используется волновой алгоритм, также известный как алгоритм Ли. Алгоритм состоит из двух частей. В первой части от начальной точки к конечной распространяется волна. Во второй выполняется обратный ход, в процессе которого из ячеек волны формируется путь.
Волна, идущая от начальной к конечной точке, на каждом шаге первой части алгоритма пополняется свободными ячейками, которые, во-первых, еще не принадлежат волне, и, во-вторых, являются соседями ячеек, попавших в волну на предыдущем шаге. Непроходимые ячейки просто игнорируются. Новые ячейки волны заполняются минимальным значением соседской клетки, которая уже принадлежит волне, увеличенным на единицу. Начальная клетка заполняется нулём и является стартовой для распространения волны. Для определения соседних ячеек используется окрестность фон Неймана (Рис.~\ref{fig:fon}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.2\linewidth]{img/fon.png}
\caption{Окрестность фон Неймана.}
\label{fig:fon}
\end{figure}
На Рис.~\ref{fig:first-step}-\ref{fig:last-step} представлены иллюстрации работы первой части алгоритма.
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/first-step.png}
\caption{Первый шаг распространения волны.}
\label{fig:first-step}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/third-step.png}
\caption{Третий шаг распространения волны.}
\label{fig:third-step}
\end{figure}
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/last-step.png}
\caption{Последний шаг распространения волны.}
\label{fig:last-step}
\end{figure}
Восстановление пути происходит в обратном направлении: при выборе ячейки от финишной ячейки к стартовой на каждом шаге выбирается ячейка со значением на единицу меньше текущей ячейки (Рис.~\ref{fig:reverse}).
\begin{figure}[h!]
\centering
\includegraphics[width=0.45\linewidth]{img/reverse.png}
\caption{Восстановление пути.}
\label{fig:reverse}
\end{figure}
Волновой алгоритм либо находит кратчайший путь от начальной к конечной точке, либо информирует о неудаче, если путь к конечной точке блокируется препятствиями.
\newpage