Поиск ближайших точек на языке си

Ответить
SilentM
Сообщения: 5
Зарегистрирован: 19 апр 2009, 16:50

27 май 2009, 23:53

Здравствуйте! Есть задача, язык си:
1.Фиксируем несколько точек (А,Б,С.Д и т.д. их может быть сколько угодно), их координаты вводим с клавиатуры
2.Около них имеется множество других точек, чьи координаты мы также задаем с клавиатуры.
3.Надо найти из этого "множества других точек" ближайшую к каждой из пункта 1, а также вывести это минимальное расстояние и координаты этой точки.
Ну т.е. в ответе мы должны иметь типа :
"
ближайшая к А точка Б1 с координатами (2,3), расстояние=4
ближайшая к Б точка Б2 с координатами (3,7), расстояние=2
ближайшая к С точка Б3 с координатами (1,7), расстояние=3
ближайшая к Д точка Б4 с координатами (3,7), расстояние=1.73
..."
и т.д. для каждой точки.


Есть код, который работает так же, но только для 1 точки. Т.е в пункте 1. мы имеем не (А,Б,С,Д..) а только А
Т.е. фактически мне нужно вставить в этот код условие для множества точек.
Не знаю как сделать, помогите пожалуйста!

Код: Выделить всё

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
int k,n,m;
float r,p;

cout<< "zadaite kolichestvo sravnivaemyh tochek (vmeste s A): ";
cin>> k;

float **B;
B = new float *[k];
for (int i = 0; i < k; i ++)
B[i] = new float [2];
B[0][0]=4, B[0][1]=5;

for (n=1; n<k; n++)
{
cout<<"vvedite koordinaty"<< n<<" tochki:\n";
cout<<"x"<<n<<"= ";
cin>>B[n][0];
cout<<"y"<<n<<"= ";
cin>>B[n][1];
}

m=1;
r=sqrt((B[0][0]-B[1][0])*(B[0][0]-B[1][0])+(B[0][1]-B[1][1])*(B[0][1]-B[1][1]));

for (n=2; n<k; n++)
{
p=sqrt((B[0][0]-B[n][0])*(B[0][0]-B[n][0])+(B[0][1]-B[n][1])*(B[0][1]-B[n][1]));
if (p<r)
{m=n, r=p;}
}
cout<<"tochka B"<<m<<" raspolozhena na minimalnom rasstoyanii r="<<r<<"\n";

return 0;
}




Ответить