Страница 1 из 1

пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 13:14
olmer
Есть несложная задача для мастеров..наверное минут на 20, не больше.(кто хочет, может засечь для интереса :) )
Но очень надо ее решить за 1.5 дня!!А я сам написать не могу, так как не программист..
Итак, есть множество точек на плоскости(задано массивом n на 2 - координаты точек). Надо найти многоугольник, не обязательно выпуклый, чтобы его периметр был максимален. (естественно, многоугольник без самопересечения)
Пожалуйста!..жить хочется :)

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 14:41
Хыиуду
все N точек должны быть задействованы?

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 16:11
olmer
а разве есть вариант, когда задействованы не все точки и периметр максимален?
по моим соображениям такого варианта вроде нет..периметр все-таки..

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 17:25
olmer
сейчас неожиданно сообразил, что не всегда надо выбирать максимально удаленную вершину и проверять на самопересечение...есть пример, когда выгоднее не брать самую удаленную...так что, может быть, и не все врешины надо использовать..но желательно!

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 17:28
olmer
хотя если с циклом по всем вершинам как возможным начальным, то такой проблемы нет..хотя как проверять на самопересечение отрезок и многоугольник

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 22 май 2007, 17:45
olmer
да, точно не обязательно все вершины..

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 23 май 2007, 10:46
Хыиуду
Тогда рекурсивным перебором. Всего переборов (Сумма по i от 1 до N) С(i,N). Т. е. уже для 10 точек - 6235301 вариантов, для 15 - 2246953104076, для 20 - 4180411311071440001. Считайте :)

Re: пожалуйста, помогите решить задачку на си++!

Добавлено: 23 май 2007, 16:12
olmer
это понятно..а конструктивные соображения есть?? перебрать все варианты это тупо.
я вот пока придумал перейти в полярную систему координат и занумеровать точки в порядке возрастания углов..тогда чтобы не было самопересечения - перебирать надо уже только многоугольники из точек(многоугольник - типа последовательность точек ..считая, что последний элемент посл-ти - соединен с первым автоматически.). с возрастающими номерами..