Описание алгоритма
This commit is contained in:
BIN
report/img/first-step.png
Normal file
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
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
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
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
BIN
report/img/third-step.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user