Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 5

Алгоритм. разработка программы нахождения пути.

27.03.2010, 00:22. Показов 2256. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!..прошу помощи в разработке программы нахождения пути из точки А в точку В на карте..Необходимо задать игровое поле,которое должно быть во-первых, дискретным (разбитым на секторы), и во-вторых, каждая
ячейка поля может быть как доступной для перехода, так и быть
препятствием.
надо пройти от A до B. Нам необходим массив направлений
такого же размера что и карта с ландшафтом. Так же необходимо иметь два
списка с координатами (X,Y) свободных секций карты. Количество
элементов в них зависит от размера карты.


заранее спасибо за рассмотрение))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2010, 00:22
Ответы с готовыми решениями:

Алгоритм нахождения критического пути
Для нахождения критического пути служит алгоритм: 1) Эйлера 2) Гамильтона 3) Краскала 4) Дейкстры

Разработать алгоритм программы, нахождения суммы нечетных цифр целого числа
Разработать алгоритм программы, нахождения суммы нечетных цифр целого числа.

А* Алгоритм нахождения пути
Доброго времени суток, Я пишу лабораторную по А* но алгоритм уже должен работать но ни как не хочет посмотрите плиз код, буду очень...

5
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
27.03.2010, 09:51
Будем рассматривать случай, когда поле (карта) конечна и каждая ячейка характеризуется только статусом «Доступна» или «Заблокирована», который не зависит ни от каких параметров (в т.ч. положении человека на этом поле) и задается изначально. Если поле разбито на ячейки в виде сетки, то каждая ячейка задается двумя координатами (i,j), где 0<i<n+1 и 0<j<m+1, (n,m) — размеры карты. Тогда статум ячейки будет будем считать функцией двух аргументов A[i,j] :: {True, False}

При таком построении человек по карте может перейти из (i,j) только в (i+1,j), (i,j+1), (i,j-1) и (i-1, j) и никуда более. Пусть изначально человек стоял на позиции (x, y). Очевидно, что в таком случае все поля, не занятые преградами, то есть те, где A принимает True, делятся на две группы: доступные (те, куда из (x, y) можно дойти) и недоступные (например, изолированные камеры). Обозничим через P[i,j] :: {none, left, right, top, bottom} доступность ячейки (i, j): none, если ячейка изолирована или ещё не определена, left, если в неё можно прити слева, right — если справа и т.д.
Очевидно, что если нас интересует путь от (x, y) в (r, t) и P полностью построена, то в случае P[r,t]=none пути нет, в противном случае путь от (x,y) в (r,t) == путь от (x,y) в (r',t') ++ переход от (r', t') в (r,t), где (r',t') — ячейка, из которой можно прийти в (r,t), она определяется непосредственно P[r,t]. Это называется обратным ходом.

Осталось последнее: сформировать P. Для этого положим P[_,_]==none. Установим P[x+1,y]=left, P[x-1,y]=right, P[x,y+1]=bottom, P[x,y-1]=top, исключая поля, где A=False (иными словами, из 4 полей, окружающих стартовую позицию, доступны те, в которых нет препятствий). Инициализируем массив-список C[s], который хранит координаты точек, только что рассмотренных. Суть в том, что если мы какую-то ячейку рассмотрели на возможность перехода от неё к соседям (на первом шаге — это (x,y)), эта ячейка больше не будет в рассуждениях фигурировать, так как, очевидно, путь не должен проходить через одну ячейку дважды (это как минимум, глупо, также невыгодно для путишественника и сложно для нас, программистов). А те ячейки, которые мы только-только рассмотрели (упомянули) в контексте «в неё можно прийти», становятся подозрительными, потому что они, быть может, являются звеньями в пути. Поэтому мы на каждом этапе будем запоминать все подозрительные ячейки в списке C и на следующем этапе мы будем оперировать только с ячейками из этого списка. Идея, думаю, ясна.
Эта часть завершается тогда, когда список C становится пустым (т.е. все ячейки, в которые можно прийти, уже рассмотрены).

Первый этап описан (см. выше), точки (x+1,y), (x-1,y), (x,y+1), (x,y-1) должны быть занесены в список C.

Описание общего этапа (второй, третий, ...):
1. Онуляем список C' (аналог C, только для нового этапа)
2. Для каждой точки (x,y) из списка рассматриваем (x+1,y), (x-1,y), (x,y+1), (x,y-1) на предмет доступности (функция A) и, если какие-то ячейки физически доступны, устанавливаем для них P соотв. значение (P[x+1,y]=left, P[x-1,y]=right, P[x,y+1]=bottom, P[x,y-1]=top); добавляем эти ячейки в список C'.
3. Этап завершен. Если C' непуст, запускаем навый этап уже со списком C' (т.е. C:=C'). В противном случае перебраны все варианты и программе больше нечего делать. [Также можно делать выход тогда, когда в C' есть конечная ячейка (r,t), что означает, что мы уже способны указать путь к ней.]

Примечание по реализации подобного алгоритма на языках типа C/C++/Pascal/Delphi/Fortran/...
• A и P лучше делать двумерными массивами [0..n+1, 0..m+1], в крайних строчках/столбцах хранить False и none, как маркер границы карты.
• C — массив [1,nm/2], элементы которого имеют структурный тип {X:1..n, Y:1..m}. Также лучше использовать "указатель" на голову массива (т.е. ввести переменную, в которой содержится информация о количестве элементов в C)
• Можно вместо C и C' использовать один список и работать с ним, как со стеком. Не советую. Как минимум, потому что нет никаких гарантий того, что полученный путь самый краткий.

Оценка сложности: ~nm.
1
0 / 0 / 0
Регистрация: 26.03.2010
Сообщений: 5
27.03.2010, 11:40  [ТС]
идея ясна,большое спасибо...но мне бы сам код программы,реализация....желательно на Delphi или С++
0
Day
 Аватар для Day
1180 / 990 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
27.03.2010, 14:39
А алгоритм Дийкстры не подойдет ? Похоже, он один из самых эффективных и в программировании не сложен. И гуглом его можно найти
1
Эксперт функциональных языков программированияЭксперт по математике/физике
4313 / 2105 / 431
Регистрация: 19.07.2009
Сообщений: 3,204
Записей в блоге: 24
28.03.2010, 21:50
Алгоритм Дейкстры, используемый для нахождения минимального пути на графе со взвешенными вершинами, тут будет несколько странным хотя бы потому, что на каждом этапе этот алгоритм определяет, к какой точке есть ближайший маршрут из ещё нерассмотренных точек. Вообще говоря, грубый поиск в ширину тут скорее даст большую эффектность (хотя в данном случае у них суть похожая).
А вообще, Just Google It:
• Алгоритм Дейкстры
• Поиск в ширину
0
1 / 1 / 2
Регистрация: 21.03.2010
Сообщений: 38
15.04.2010, 10:19
Алгоритм Дейкстры - не самая быстрая вещь. Мне кажется его разумно использовать для сложных, запутанных графов с циклами.
А здесь и впрямь лучше попробовать поиском в ширину.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2010, 10:19
Помогаю со студенческими работами здесь

Распаралелить алгоритм нахождения кратчайшего пути
Здравствуйте. Помогите, пожалуйста, распаралелить алгоритм Дейкстры. Вообще идей нету как это можно сделать. public class...

Исследовать алгоритм нахождения Эйлерова пути в неориентированном графе
Задание: Реализовать в виде программы и исследовать алгоритм нахождения эйлерова пути в неориентированном графе. и еще тупой вопрос...

Визуализировать алгоритм Форда – Беллмана нахождения минимального пути на графе
Возможно пишу не совсем туда, но все же: Необходимо визуализировать алгоритм Форда – Беллмана нахождения минимального пути на графе ...

Теория графов: алгоритм нахождения матрицы достижимости с ограничением пути веса
Парни помогите составить алгоритм нахождения матрицы достежимости с ограничением пути веса. Дана вот такая матрица 00500000 90006000...

Создание программы для нахождения критического пути графа
Здравствуйте, в универе задали задачу написать программу, реализующую алгоритм нахождения критического пути на графе. Данные берутся с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru