| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > помогите придумать алгоритм |
| Автор: knut 16.1.2008, 11:53 |
| обрый день. есть след. задаза. даны прямоугольники в произвольном порядке на экране. и есть 2 точки. надо соединить эти 2 точки так чтоб линия соединяющая эти 2 точки не пересекала не один прямоугольник. и путь этот должен быть кратчайшим вот не как не могу придумать алгоритм. |
| Автор: maxim1000 16.1.2008, 12:03 |
| помнится, была старая тема похожая: http://forum.vingrad.ru/topic-3781.html честно говоря, не помню, чем там всё кончилось, но на всякий случай стоит почитать |
| Автор: Kangaroo 16.1.2008, 12:16 |
| Может подойти со стороны игрушек? То есть сформулировать задачу так: найти кратчайший путь между двумя точками, где прямоугольники - препятствия. А про алгоритмы поиска пути можна почитать http://www.iskint.ru/?xid=games-poisk_puti |
| Автор: _Y_ 16.1.2008, 13:05 |
| Я бы попробовал такое приближение. Сначала условие - прямоугольники пересекать нельзя, но касаться их можно. Если и касаться нельзя - тогда на первом этапе увеличил бы каждый прямоугольник в каждую сторону на величину "запрещенного приближения к прямоугольнику" и дальше считал уже для новых прямоугольников. Дальше по такому алгоритму.
|
| Автор: knut 16.1.2008, 17:59 |
| _Y_, если я все правельно понял то мне надо создать взвешенный граф след. способом. соеденить все вершины прямоугольников друг с другом кроме тех соеденение каторых приведет к пересечениям ребер(так мы получем ребра графа). а затем уже в этом графе найти кратчайший путь от А до Б. |
| Автор: SoWa 16.1.2008, 18:19 |
| Да вы что, ребят... Задача просто сводится к волновому алгоритму. Просто между прямоугольниками надо построить еще прямоугольники, хранящие в себе уену прохода. В примеру: По вертикали два прямоугольника на расстоянии Н. Вот тогда прямоугольник, по которому можно ходить будет размера (max(l1,l2), H). Это так, примерно. Можно свести все прямоугольники к единичному размеру и просто обходить их- имхо это проще реализовать, чем пути по построенным доп. прямоугольникам |
| Автор: _Y_ 16.1.2008, 19:26 |
| knut, ИМХО так. Если прямоугольников не слишком много - все должно работать быстро и приятно. Кстати - должно работать вообще с любыми многоугольниками. SoWa вот что-то совсем другое предлогает - может и лучше, но я совершенно не понял что именно. |