![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
XaMMaX |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Ну ни как не могу врубится в волновой алгоритм! Плиз пример кода простой и понятный!!
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
XaMMaX |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Эту статью я уже нагугливал =( Volvo, если не труднол мог бы ты коменты поставить там где пример на паскале и выложить сюда?
|
XaMMaX |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Единственное что мне пришло в голову это:
Каждый раз пробегать весь мосив , допустим ищю 1 пробегаю массив и каждому найденому 1 применяю процедуру(для обозначения 2) потом так же с два и т.д. но ресурсов я чувствую это сожрёт не меренно =) Volvo, HELP!!! |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Объяснение алгоритма (только без программы) есть здесь:
Волновой алгоритм - Построение крaтчaйшего мaршрутa Попробуй совместить программу с Алголиста с этими комментариями... |
Michael_Rybak |
![]()
Сообщение
#6
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Цитата Каждый раз пробегать весь мосив , допустим ищю 1 пробегаю массив и каждому найденому 1 применяю процедуру Молодец. Это правильно, и это будет работать, но, действительно, медленно. Вместо того, чтобы каждый раз бегать по всему массиву, лучше заведи еще другой, линейный массив записей (x, y), в который пихай все вершины, в которые что-пишешь. И просто иди по нему слева направо. Вроде такого: type TCoord = record x, y: integer end; |
XaMMaX |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Мда чё то не работает =(
Вот как я сделал (извените что на фениксе я думаю будет понятно они с паскалем очень схожи) Код process wave(i0,j0); private i;j;cp; struct p; x; y; end struct p1; x; y; end begin from i=1 to 9 step 1 from j=1 to 9 step 1 mark[i][j]=-1; end end mark[i0][j0]=0; p.x=i0; p.y=j0; np=1; pp[1].x=p.x; pp[1].y=p.y; cp=1; while cp<=np : p.x = pp[cp].x; p.y = pp[cp].y; if ((p.x < 10) and (balls[p.x + 1][ p.y].color == 0) and (mark[p.x + 1][ p.y] == -1)) p1.x = p.x + 1; p1.y = p.y; mark[p1.x][p1.y] = mark[p.x][p.y] + 1; np++; pp[np].x = p1.x; pp[np].y = p1.y; write(0,0,10,0,"right"); end; if ((p.x > 1) and (balls[p.x - 1][ p.y].color == 0) and (mark[p.x - 1][ p.y] == -1)) p1.x = p.x - 1; p1.y = p.y; mark[p1.x][p1.y] = mark[p.x][p.y] + 1; np++; pp[np].x = p1.x; pp[np].y = p1.y; write(0,0,20,0,"left"); end; if ((p.y < 10) and (balls[p.x][p.y+1].color == 0) and (mark[p.x][p.y+1] == -1)) p1.x = p.x; p1.y = p.y + 1; mark[p1.x][p1.y] = mark[p.x][p.y] + 1; np++; pp[np].x = p1.x; pp[np].y = p1.y; write(0,0,30,0,"down"); end; if ((p.y > 1) and (balls[p.x][p.y-1].color == 0) and (mark[p.x][p.y-1] == -1)) p1.x = p.x; p1.y = p.y - 1; mark[p1.x][p1.y] = mark[p.x][p.y] + 1; np++; pp[np].x = p1.x; pp[np].y = p1.y; write(0,0,40,0,"up"); end; cp++; frame; end from i=1 to 9 step 1 from j=1 to 9 step 1 write(0,i*20,j*20,0,mark[i][j]); frame; end end frame; end Сообщение отредактировано: XaMMaX - 20.11.2006 20:00 |
Michael_Rybak |
![]()
Сообщение
#8
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Ты забыл увеличить номер обрабатываемой клетки (cp := cp + 1;)
Сообщение отредактировано: Michael_Rybak - 20.11.2006 18:58 |
XaMMaX |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Так опменял но чёто странные результаты(такое чувство что выполняется обработка только раз =() Может в фениксе while по другому юзается =( Тогда под repeat перестрою! Так как мне тогда условия поставить(да наверное глупый вопрос, но ника не доходит)? И вот что за фигня выходит(на скрине)
![]() Хотя думаю дело не в фениксе где то ошибка в коде while правильно работает =( Сообщение отредактировано: XaMMaX - 20.11.2006 19:22 |
XaMMaX |
![]()
Сообщение
#10
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Ничё не пойму повторяется вроде правильно =\ Плиз помогите, а то буду чувствую неделю сидеть и всё равно не надуматьв чём ошибка =(
Сообщение отредактировано: XaMMaX - 20.11.2006 19:52 |
Michael_Rybak |
![]()
Сообщение
#11
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Не ну как это называется. У тебя есть полное описание, есть мой псевдокод, а ты даешь мне код на фениксе, который я в жизни не видел, и спрашиваешь, что не работает. Ты умеешь пользоваться средствами отладки? Если их в фениксе нет, повставляй кучу write'ов, и определи, сколько раз выполняется цикл, в какой последовательности обрабатываются клетки и т.д.
С опытом у тебя это будет получаться все лучше, но только если начнешь пробовать. |
Гость |
![]()
Сообщение
#12
|
Гость ![]() |
Ну да ты прав =) Попробую в паскале сделать сначала =) Ну завтра на свежую голову лучше ждите завтра думаю пару вопросов ещё будет (хотя надеюсь вопросов больше не будет и справлюсь сам, но к сожалению это мой первый лайнс и даётся мне кое как) ^_^
|
Michael_Rybak |
![]()
Сообщение
#13
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Нормально дается, стараешься, и выходит. В начале так и должно быть. Давай, приходи, будем смотреть. И паскалевский код я хоть подебажить смогу
![]() |
XaMMaX |
![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
Алилую даже на паскаль переписывать не пришлось =) Половина алгоритма сделана! Осталось теперь находить сам путь вот сдесь у меня появилась проблемма =(Michael_Rybak, как ты это делаеш? Я начал так смотрю четыре ближние клетки нахожу наименьшую потом делаю то же с наименьшой и т.д. правильно? Я создал отдельную матрицу и путь обозначил цифрами 1 =)
|
Michael_Rybak |
![]()
Сообщение
#15
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
|
XaMMaX |
![]()
Сообщение
#16
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 85 Пол: Мужской Реальное имя: max Репутация: ![]() ![]() ![]() |
А я исключил это сразу =) Ну раз правильно двигаюсь дальше! Ещё приду!
|
Michael_Rybak |
![]()
Сообщение
#17
|
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
Приходи
![]() |
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 12:53 |