Здесь, правда, печатаются не номера точек, а их координаты
Вот код функции process, где еще печатаются номера точек:
Код:
void process()
{
//здесь хранятся минимальное расстояние и точки, для которых это расстояние найдено
Point min_a;
Point min_b;
float min_distance = NaN; //сначала минимальное расстояние не имеет значения
unsigned min_i = -1;
unsigned min_j = -1;
/*
определяем количество заданных точек
для этого узнаем размер в байтах всего массива x_coords и делим на размер элемента в байтах
если бы x_coords был передан в качестве указателя, то такой способ бы не подошел
*/
const unsigned cnt_of_points = sizeof(x_coords) / sizeof(x_coords[0]);
//запустим цикл для всех заданных точек
for(unsigned i = 0; i < cnt_of_points; ++i)
{
/*
i - индекс первой точки в паре
j - индекс второй точки в паре
вторую точку надо искать только из последующих точек (начиная с j = i + 1),
т.к. предыдущие точки уже были рассчитаны
*/
for(unsigned j = i + 1; j < cnt_of_points; ++j)
{
const Point a(x_coords[i], y_coords[i]); //первая точка
const Point b(x_coords[j], y_coords[j]); //вторая точка
const float distance = calc_distance(a, b); //расстояние между точками
/*
если минимальное расстояние не имеет значеня
или
текущее расстояние меньше минимального,
то запоминаем текущее расстояние как минимальное,
также запоминаем текущие точки
*/
if(isnan(min_distance) || distance < min_distance)
{
min_distance = distance;
min_a = a;
min_b = b;
min_i = i;
min_j = j;
}
}
}
//отдаем полученную информацию на устройство вывода (консоль, например)
std::cout << "min distance: " << min_distance << endl;
std::cout << "point A: [" << min_i << "] ";
min_a.to_std_cout();
std::cout << endl;
std::cout << "point B: [" << min_j << "] ";
min_b.to_std_cout();
std::cout << endl;
}