мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
Следующая версияСледующая версия справа и слева
pascal4beginners-pathfind [31/01/2012 09:53] ocapascal4beginners-pathfind [31/01/2012 09:57] oca
Строка 664: Строка 664:
     Любую стену можно задать четырьмя числами: (x, y, dx, dy), то есть с помощью координат локации и смещений (я особо не останавливаюсь на этом, потому что мы не раз уже пользовались таким способом, например в функции CanGo() и процедуре BreakWall()). Таким образом, «массив стен» — это массив таких четверок.      Любую стену можно задать четырьмя числами: (x, y, dx, dy), то есть с помощью координат локации и смещений (я особо не останавливаюсь на этом, потому что мы не раз уже пользовались таким способом, например в функции CanGo() и процедуре BreakWall()). Таким образом, «массив стен» — это массив таких четверок. 
     Теперь можно заняться реализацией алгоритма. Мой вариант приведен в листинге 4.4, скриншот работающей программы — на рис. 4.9.      Теперь можно заняться реализацией алгоритма. Мой вариант приведен в листинге 4.4, скриншот работающей программы — на рис. 4.9. 
-    Листинг 4.4. Генерация лабиринта по алгоритму Краскала+     
 +<code | Листинг 4.4. Генерация лабиринта по алгоритму Краскала
  
     function KruskalGenerateMaze(Width, Height : Integer) : Maze;     function KruskalGenerateMaze(Width, Height : Integer) : Maze;
Строка 692: Строка 694:
     function IsConnected(xs, ys, xf, yf : Integer) : Boolean;     function IsConnected(xs, ys, xf, yf : Integer) : Boolean;
     ... { используется алгоритм волновой трассировки }     ... { используется алгоритм волновой трассировки }
- +   
-    Листинг 4.4 (продолжение)+
     begin     begin
     { выделение памяти для массива стен }      { выделение памяти для массива стен } 
Строка 755: Строка 756:
     KruskalGenerateMaze := TheMaze;     KruskalGenerateMaze := TheMaze;
     end;     end;
 +</code>
  
  
Строка 762: Строка 763:
 2. Есть два простых способа улучшить алгоритм волновой трассировки: • На каждой итерации работы алгоритма происходит поиск локаций, помеченных числом N. Чтобы не пробегать по всему лабиринту, можно просто хранить их в отдельном списке (разумеется, его придется постоянно обновлять). 2. Есть два простых способа улучшить алгоритм волновой трассировки: • На каждой итерации работы алгоритма происходит поиск локаций, помеченных числом N. Чтобы не пробегать по всему лабиринту, можно просто хранить их в отдельном списке (разумеется, его придется постоянно обновлять).
  
-    • Можно «разлить кисель» не только в стартовой локации, но и в финишной. Как только оба потока жидкости пересекутся в некоторой локации, маршрут найден.+Можно «разлить кисель» не только в стартовой локации, но и в финишной. Как только оба потока жидкости пересекутся в некоторой локации, маршрут найден.
          
-    • Реализуйте оба варианта на практике.+Реализуйте оба варианта на практике.
  
 3. Добавьте в процедуры обхода лабиринта код, который позволит наблюдать ход решения. К примеру, в алгоритме рекурсивного обхода можно рисовать на экране текущий маршрут, а в алгоритме волновой трассировки выделять локации, помеченные значением N. 3. Добавьте в процедуры обхода лабиринта код, который позволит наблюдать ход решения. К примеру, в алгоритме рекурсивного обхода можно рисовать на экране текущий маршрут, а в алгоритме волновой трассировки выделять локации, помеченные значением N.