Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 176
от 16.09.2003, 18:41

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 309
Отправлено ответов: 1082
Активность: 350.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

_vt
Статус: Профессиональный
Общий рейтинг: 122.26
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.06
[Подробней >>]
The propheT
Статус: Доверительный
Общий рейтинг: 134.02
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 117.57
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 308. Привет Спецы-коллеги! Есть один вопрос. ДАНО: Есть у меня заранее описанный массив 10x10, сос... (ответов: 4)

Вопросов: 1, ответов: 4


 Вопрос № 308

Привет Спецы-коллеги!
Есть один вопрос.
ДАНО: Есть у меня заранее описанный массив 10x10, состоящий из байтов. Каждый элемент может принимать значения 0,1,255.
Самый первый элемент (1,1) - это человек, а один байт со значением 255 задаёт цель. Все байты со значением 1 - это стены, через них нельзя ходить. По всем элементам со значением 0 ходить можно.
ЗАДАНИЕ: Мне нужна функция, которая будет искать путь к нашей цели, если он есть. Эта функция, допустим возвращает массив, размером 100 байт (10*10=100 - максимум), в котором каждый байт-элемент задаёт одно из четырёх направлений движения: 1-вверх,2-вниз,3-влево,4-вправо. Таким образом должен возвратиться массив примерно такого вида: 2,2,2,4,4,4 - путь к байту 255.
Всё это называется "алгоритм поиска пути" и используется в играх (линии, например).

ВОПРОС 1: Нет ли у кого исходников подобного?
ВОПРОС 2: Может есть просто алгоритм в виде документации?




Вопрос отправлен: 13.09.2003, 18:34
Отправитель: ^URiS^ (urisff@inbox.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, ^URiS^!
1) Да, у меня есть...(мое мыло...)
2) Может есть, но у меня нет :(

*** E-Man 1.5( edition 04) - life is just a game***


Ответ отправлен: 14.09.2003, 10:13
Отправитель: _vt


Отвечает vitya

Приветствую Вас, ^URiS^!
предлагаю просто поискать в интернете. Волновой алгоритм или Алгоритм Ли, еще можно использовать лучевой алгоритм. Документации достаточно для написания программы.

Ответ отправлен: 14.09.2003, 11:46
Отправитель: vitya


Отвечает The propheT

Доброе время суток, ^URiS^!
Тебе кратчайший путь или в принципе доползти?

Ответ отправлен: 14.09.2003, 00:52
Отправитель: The propheT


Отвечает Ayl

Доброе время суток, ^URiS^!
Например, подойдет волновой алгоритм.
Так как у тебя используется только 3 значения (0, 1 и 255), а путь, как ты логично подметил, не может быть длинее 100 шагов, то можно использовать числа из диапазона 100-199 для пометки пути.

Теперь, собственно, алгоритм:
1. Установить номер шага в 0. Принять клетку (1,1) за текущую.
2. Проверить текущую клетку на значение 255 (достигли точку назначения). Если достигли - перейти к шагу 6, иначе поместить значение 100+номер шага в текущую клетку.
3. Увеличить номер шага на 1.
4. Проверить 4 окружающие текущую клетки. Здесь возможны варианты:
4.1. Клетка помечена как свободная или конечная - выполняем шаг 5.
4.2. Клетка помечена как стена - игнорируем.
4.3. Клетка имеет пометку по другому пути - сравниваем значение номера шага с записанным в клетке. Если номер щага больше значения в клетке - игнорируем, иначе переходим к шагу 5.
5. Поместить проверяемую клетку в очередь для обработки и повторить алгоритм с шага 2.
6. Если остались свободные клетки (поставленные в очередь на шаге 4) - продолжить их обработку (требуется при нахождении кратчайшего пути).
7. Помечены все пути. Переходим в последнюю клетку и начинаем двигаться в обратном направлении (перебираем 4 окружающие клетки для поиска значения, которое равно значению в текущей клетке минус 1). Оно гарантировано существует при условии, если хотя бы один раз была достигнута конечная клетка.

В Приложении - примерная реализация алгоритма.

Приложение:

Ответ отправлен: 15.09.2003, 13:29
Отправитель: Ayl



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (33)
C / C++ (28)
Perl (6)
Builder / Delphi (19)
Pascal (21)
Basic / VBA (10)
Java / JavaScript (12)
PHP (11)
Криптография (9)
WinAPI (17)
Пользователю
Windows 95/98/Me (47)
Windows NT/2000/XP (63)
"Железо" (37)
Поиск информации (23)
Администратору
Windows NT/2000/XP (27)
Linux / Unix (11)
Юристу
Гражданское право (9)
Семейное право (6)
Трудовое право (7)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное