diff --git a/report/img/first-step.png b/report/img/first-step.png new file mode 100644 index 0000000..0d253da Binary files /dev/null and b/report/img/first-step.png differ diff --git a/report/img/fon.png b/report/img/fon.png new file mode 100644 index 0000000..3cb0786 Binary files /dev/null and b/report/img/fon.png differ diff --git a/report/img/last-step.png b/report/img/last-step.png new file mode 100644 index 0000000..fa502d6 Binary files /dev/null and b/report/img/last-step.png differ diff --git a/report/img/reverse.png b/report/img/reverse.png new file mode 100644 index 0000000..78812ac Binary files /dev/null and b/report/img/reverse.png differ diff --git a/report/img/third-step.png b/report/img/third-step.png new file mode 100644 index 0000000..d0c180d Binary files /dev/null and b/report/img/third-step.png differ diff --git a/report/report.tex b/report/report.tex index 273ab85..44ce81e 100644 --- a/report/report.tex +++ b/report/report.tex @@ -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