В множестве точек на плоскости найти пару точек с максимальным расстоянием между ними - C (СИ)
Формулировка задачи:
В множестве точек на плоскости найти пару точек с максимальным расстоянием между ними.
Решение задачи: «В множестве точек на плоскости найти пару точек с максимальным расстоянием между ними»
textual
Листинг программы
#include <stdio.h>
#define NUM 5
typedef struct {
int x, y;
} point;
int distance(const point* a, const point* b){
int dx = a->x - b->x;
int dy = a->y - b->y;
return dx*dx + dy*dy;
}
int main(void){
int i, j, m, d;
point* p1, *p2;
point ds[NUM] = {
{50,145}, {10,145}, {110,112}, {117,19}, {130,120}
};
p1 = p2 = &ds[0];
m = 0;
for(i = 0; i < NUM; ++i){
for(j = i + 1; j < NUM; ++j){
if((d = distance(&ds[i], &ds[j])) > m){
m = d;
p1 = &ds[i];
p2 = &ds[j];
}
}
}
if(p1 != p2)
printf("%d,%d <-> %d,%d\n", p1->x, p1->y, p2->x, p2->y);
getchar();
return 0;
}
Объяснение кода листинга программы
В этом коде используется язык программирования C. Задача заключается в поиске двух точек с максимальным расстоянием между ними в заданном множестве точек на плоскости. Список действий, выполняемых в коде:
- Включаем заголовочный файл
stdio.h, который содержит функции для ввода и вывода данных. - Определяем константу
NUMравную 5, которая указывает количество точек в множестве. - Определяем структуру
point, которая представляет точку на плоскости и содержит координатыxиy. - Функция
distanceвычисляет расстояние между двумя точками, используя формулуdx*dx + dy*dy, гдеdxиdy- разность координатxиyсоответственно. - В функции main создаем массив**
ds[NUM]типаpoint, который содержитNUMточек с координатами. - Начальные значения
p1иp2указывают на первую точку в массивеds. - Переменная m инициализируется нулем и будет использоваться для хранения текущего максимального расстояния.
- В цикле двойного перебора, для каждой пары точек в массиве
ds, вычисляется расстояние между ними с помощью функцииdistance. - Если это расстояние больше текущего максимального расстояния, обновляются значения
m,p1иp2. - По завершении цикла, если
p1иp2не равны, выводится сообщение с координатами этих двух точек. - Программа ожидает ввода символа, прежде чем завершиться.
- Возвращаем значение 0, что означает успешное выполнение программы.