Вернуться   Форум программистов > Форум Программирование > Форум Visual Basic

Visual Basic

Программирование на Visual Basic

Ответ
 
Старый 01.07.2007, 18:54   #1
corvus
Пользователь
 
Регистрация: 15.03.2007
Сообщений: 33
corvus пока не определено
По умолчанию волновой метод, кратчайшее расстояние

ниже рисунком привожу карту, нормальный вид карты можно увидеть по адресу http://2983.ru/road.jpg http://2983.ru/road.jpg , на карте два варианта конечной точки (верхняя и нижняя)
где красное поле - непроходимая область,
желтое - проходимое
синее - конечная точка 'переменная
розовое - начальная 'переменная
цифрой "-5" - объявляю непроходимые поля, "-4" - поля где дорога равна нулю, "-2" нормальная дорога со стандартной длиной, "0" - конечная точка
<IMG src="http://www.relib.com/forums/Uploads/Images/8ce4d08e-1fe8-4e70-8523-f6a6.jpg
первой группой циклов я заполняю массив M(i,j) или M(12,8) количеством переходов, причем расстояния с "нулевым" переходом не увеличивают путь...

Теперь требуется обратным методом дойти до конца...
мои идеи: если M(2,5)=M(3,5)-1 тогда записываем в например пустые массивы A(n) и B(n) значения 3 и 5 соответственно на n=1, где n-максимально возможное количество переходов, только как все это сунуть в массив... учитывая что например начальному полю соответствует так же еще одна ячейка с таким же значением...

P.s. косяк так же если конечная(начальная) точка находится рядом с нулевым путем...</DIV>http://2983.ru/road.jpg
corvus вне форума  
Старый 01.07.2007, 23:34   #2
corvus
Пользователь
 
Регистрация: 15.03.2007
Сообщений: 33
corvus пока не определено
По умолчанию RE: волновой метод, кратчайшее расстояние

есть идея дальше пойти вот так:

'очистка массивов с координатами проходов
for n=1 to 13 step 1 ' n - максимально возможное кол-во переходов + 1 на всяк случай
A(n)=0
B(n)=0
next n
' цикл поиска пути
f = 13 ' случайное число для точки отсчета
M(2,5) = 13 'присвоил чтоб найти начало
for n = 1 to 13 step 1
for i = 2 to 11 step 1
for j = 2 to 7 step 1

if M(i+1,j) = 0 then ' проверяем не это ли конечная точка
goto 100 'как подругому выйти не знаю
end if
' такие циклы для всех M(i+1,j), M(i,j+1), M(i-1,j), M(i,j-1)

if M(i,j) = f and M(i+1,j) < M(i-1,j) and M(i+1,) < M(i,j+1) and M(i+1,j) < M(i,j-1) and M(i+1,j) > -5 then ' ищем самую маленькую координату вокруг, но чтоб была больше -5
A(n) = i+1
B(n) = j
M(i+1,j)=f+1 ' присваиваем значение на единицу больше
end if
' такие циклы для всех M(i+1,j), M(i,j+1), M(i-1,j), M(i,j-1)
next j
next i
f = f + 1 ' увеличиваем для следующего прохода...
next n
100 далее...

В результате получаем по идее массивы A(n) и B(n) с последовательностью координат точек прохода...терь вопрос просто по незнанию...как заставить выполняться команды в соответсвии с путем, т.е. например:
есть A(1)=3 и B(1)=5 это координата пути первого шага, нужно чтобы к этой точке была привязана функция (post запрос в инет)...
далее A(2)=4 и B(2)=5 следующая функция....</DIV>
corvus вне форума  
Старый 01.07.2007, 23:54   #3
corvus
Пользователь
 
Регистрация: 15.03.2007
Сообщений: 33
corvus пока не определено
По умолчанию RE: волновой метод, кратчайшее расстояние

попробую объяснить проще...

<IMG src="http://www.relib.com/forums/Uploads/Images/818b20eb-c69d-40c3-9974-3514.jpg
или в нормальном виде - http://2983.ru/road2.jpg http://2983.ru/road2.jpg

т.е. к каждой координате привязана должна быть определенная функция и программа потом следуя по массивам A и B должна выполнить функцию соответствующую координатам M( A(1),B(1) ), далее M( A(2),B(2) ), и т.д. до 13-ой...</DIV>
corvus вне форума  
Старый 01.07.2007, 23:59   #4
corvus
Пользователь
 
Регистрация: 15.03.2007
Сообщений: 33
corvus пока не определено
По умолчанию RE: волновой метод, кратчайшее расстояние

можно по идее сделать еще цикл n = 1 to 13 и впихнуть кучу if, равное количеству доступных к проходу клеток, а их 29 штук:
if A(n) = 1 and B(n) = 1 then
h=p(10)
else if A(n) = 2 and B(n) = 1 then
h=p(20)
... и т.д.....
next n

но мож можно как покороче...ибо чет писанины уж очень....

P.s. в проге-клиенте уже совсем мало остается букв под переменные...)))))))))
P.s.s. диалог сам с собой, но если у кого есть идеи как укоротить или ченить обсудить - буду очень рад...</DIV>
corvus вне форума  
Старый 02.07.2007, 03:13   #5
corvus
Пользователь
 
Регистрация: 15.03.2007
Сообщений: 33
corvus пока не определено
По умолчанию RE: волновой метод, кратчайшее расстояние

есть ошибка....в обратном ходе нужно еще goto на конец циклов вешать, иначе путь "распушается" и получается фигня...
и еще нужно там же в обратном ставить "<=" вместо "<", а то тож косяк...

P.s. удивляюсь как я раньше в школе/ВУЗе любил математику....дискретка жесть как вспоминается...еще чуть чуть и убьюсь апстенку...</DIV>
corvus вне форума  
Старый 09.07.2007, 21:31   #6
Vsh
Местный
 
Регистрация: 22.11.2000
Сообщений: 168
Vsh пока не определено
По умолчанию RE: волновой метод, кратчайшее расстояние

я всегда решал подобные задачи рекурсивно (если нет доп требований - наприм - производительность)
Vsh вне форума  
Ads
Ответ
Опции темы

Похожие темы
Тема Автор
Как программировать 3D игры? Visual Basic
Как программировать 3D игры на VB? Помогите!
SERZH
Visual Basic Нужно решить такую задачку: "Анализ вводимого текста"
Очень нужно составить прогу, которая умела бы опознавать (различать), где какие слова в предложении: существительные, глаголы, прилагательные, предлоги, местоимения и прочее. Например, есть фраза:...
Киберсоф
Проблема с вызовом макроса.. Visual Basic
Если кто-может, помогите, пожалуйста, решить такой вопрос. в Excel заданы около 10 ячеек, в которые должны заноситься определенные значения. необходимо, чтобы макрос запускался...
zillay
Подключение к базе данных (dbf) с длинным именем Visual Basic
Dim Path As String Dim file_name1 As String Dim base As ADODB.Connection Dim bRec As ADODB.Recordset
wedmed
Visual Basic Как можно на VB6 сделать перехват Api OpenProcess?
Много где искал так и не нашёл :( Как можно на VB6 сделать перехват Api OpenProcess. Тока без Ring0, нужно чтобы Юзер немог открыть процесс для чтения. Спрятать я его смог а как сделать...
usr978
Visual Basic Access 2003 и VB6.0, как связать?
Тем подобных многа....поиском пользовался...ни че не помогает... фигня походу в том что Access 2003, при тыке на RecordSource кидает Unrecognized database format + путь.... База...
corvus



Текущее время: 08:28. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Рейтинг@Mail.ru