![]() |
|
Модераторы: bsa |
![]()
|
|
| FreeJaile |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
подскажите, плз как реализовать вот это:
На окружности задано 2n точек, пронумерованных от 1 до 2n. Перечислить все способы провести n непересекающихся хорд с вершинами в этих точках. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
можно найти те точки, между которыми нет других точек и присойденить их..примерно так
![]() Добавлено через 5 минут и 47 секунд а насчет реализации - создай структуру для координаты, запихни в какой нибудь контейнер все точки, напиши предикат для сортировки.. а дальше
что-то вроде того |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Первое, что пришло в голову:
1. анализировать расстояние между точками и проводить хорды, начиная от минимального ( все хорды должны быть максимально короткими) ; 2. лучами от близлежащих точек; PS по-моему, задача больше на сортировку. Покопайте в сторону "сортировка точек по координате Х" и "сортировка точек по координате У". Это сообщение отредактировал(а) Albor - 6.3.2009, 11:02 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Расстояния вычислять не надо. Пересечение определяется по углам или по номерам (если точки стоят по порядку)
|
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
||||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Примерно так (за отсутствие ошибок не ручаюсь):
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
извиняюсь, не заметил...мне казалось только один способ нужен. тогда как сказал math64 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Точки могут и не по порядку стоять. Кто мешает хорды в виде куста сделать? Нужно составить все возможные попарные комбинации точек, затем для каждой комбинации делать линии и проверять их на пересечения друг с другом. Если нет пересечений - выводить вариант |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
||||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Я, вообще-то, полагаю, что общих точек быть не должно, так как это будет пересечением.
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Это надо у автора темы спросить. Сколько хорд можно из одной точки вести. Принципиально разницы нет - считать пересечением общую точку и все. Главное перебрать все варианты исключая повторяющиеся. Грубо говоря из массива A1, A2, ... A2n Собрать N пар с соблюдением порядка (в смысле A1-A2 подходит, а A2-A1 - нет). |
|||
|
||||
| FreeJaile |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
да, вы правы. общих точек у хорд вообще не должно быть.
я тут набросала небольшой вариант. вроде выводит все перестановки и ничто не пересекается, но варианты повторяются. никак не могу придумать, как сделать чтобы не повторялись
|
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: 2 Всего: 9 |
Я не сильно понял, зачем ты переставляешь точки? Нужно сделать обход точек сначала от 1й, потом от 2й - так мы получим все варианты хорд "контурного обхода", то есть если мы задали n=4, то должны получить пары 1и2, 3и4, либо 2и3, 4и1. После - 2й способ - создаём пары 1и n, 2 и n-1, 3 и n-2 и т.д. Затем смещаемся на одну точку и повторяем создание пар, смещаться нужно не до n, а до n/2 иначе пойдут повторы.
|
|||
|
||||
| FreeJaile |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 28.2.2008 Репутация: нет Всего: нет |
1й способ я уже пробовала. он корректно только для маленьких чисел работает(варианты не все выводит). а 2ой не поняла
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |