| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Определение координат столицы |
| Автор: dima2308 14.12.2016, 21:09 |
| Имеется N городов, каждый из которых имеет целые координаты. Расстояние между двумя городами определяется как |x1-x2|+|y1-y2|. Требуется построить n+1 город и сделать его столицей (координаты должны быть целыми). Место для столицы выбирается так, чтобы среднее арифметическое расстояний между столицей и остальными городами было наименьшим и столица не должна стоять на уже построенном городе. На вход подается N - количество городов (1<=N<=100); пары целых чисел, не превышающих 1000 по абсолютной величине - координаты городов. На выходе два целых числа X и Y - координаты столицы. Пример: Входные данные 4 0 0 1 1 0 1 1 0 На выходе имеем 0 2 Не могу составить алгоритм решения. Буду рад любой помощи. |
| Автор: Olej 18.12.2016, 17:03 | ||||
Это очень дурной, вырожденный пример для начала решения такой задачи: найденное решение 0 2 здесь является как-раз наихудшим возможным. А взять для начального тестирования любой задачи неадекватный тест - это заведомо загубить затею. Как говорит английская поговорка:
P.S. Хотя задача, сама по себе, интересная. |
| Автор: Olej 18.12.2016, 17:19 | ||||
1. Ищем размеры поля: Xmax = max( x1, x2, ...) + 1 Xmin = min( x1, x2, ...) - 1 Ymax = max( y1, y2, ...) + 1 Ymin = min( y1, y2, ...) - 1 Для всех (Xmin ... Xmax) * (Ymin ... Ymax) точек поля просчитываем сумму расстояний D и фиксируем минимум этой величины D. 2. Ищем начальную позицию внутри поля: X = sum( xi, i=1, n ) / n Y = sum( yi, i=1, n ) / n Из 4-х целочисленных позиций, окружающих вещественную позицию (X,Y) выбираем ближайшую. Итерационно, в цикле, рассчитываем расстояния до каждой Di точки ... и сдвигаем позицию (X, Y) в направлении той точки, расстояние до которой минимально. 3. Используя любую известную реализацию оптимизационного алгоритма с ограничениями (X>0, Y>0) ищем вещественный минимум функции 2-х переменных (X,Y). Из 4-х целочисленных соседей (X,Y) перебираем наилучший. (хотя это решение: "из пушки по воробьям") P.S. Кстати, из-за того, что положение начала координат (0,0) чисто условно, можно допустить и отрицательные координаты, а оптимизационные задачи без ограничений всегда решаются на порядок проще. Добавлено через 1 минуту и 25 секунд
Язык? |
| Автор: Olej 23.12.2016, 00:41 | ||||||||||||||||
capital1.cc :
Добавлено @ 00:42
Добавлено через 5 минут и 44 секунды
|