Sortowanie odleglosci punktów na podstawie pierwszego podanego punktu

0

Napisz program, który wczyta liczbę N, a następnie N+1 punktów o współrzędnych całkowitych. Program powinien wydrukować na standardowym wyjściu N punktów (wszystkie poza pierwszym) zgodnie z rosnącymi odległościami od pierwszego punktu.

Mam coś takiego, ale nie wiem jak odnieść się do pierwszego punktu, na którym ma opierać się liczenie odległości... w funkcji bool cmp zamiast zer powinien być jak domniemywam ten punkt.

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

struct punkt{
    int x;
    int y;
};

bool cmp (punkt a, punkt b){
    return sqrt((0 + a.x) * (0 + a.x) + (0 + a.y) * (0 + a.y)) < sqrt((0 + b.x) * (0 + b.x) + (0 + b.y) * (0 + b.y));
}

int main(){
    int n;
    cin >> n;
    punkt P[n + 1];
    cin >> P[0].x >> P[0].y;

    for(int i = 1; i < n + 1; ++i){
        cin >> P[i].x >> P[i].y;
    }

    sort(P, P + (n + 1), cmp);

    for(int i = 1; i < n + 1; ++i)
        cout << P[i].x << " " << P[i].y << endl;

    return 0;
}
0
    for(int i = 1; i < n + 1; ++i){
        cin >> P[i].x >> P[i].y;
    }

Skoro zaczynasz od drugiego punktu, to powinieneś napisać i++.
A tak w ogóle to możesz zacząć od i = 0 i usunąć cin >> P[0].x >> P[0].y;.


nie wiem jak odnieść się do pierwszego punktu, na którym ma opierać się liczenie odległości... w funkcji bool cmp zamiast zer powinien być jak domniemywam ten punkt.

Nie wiem, czy to zadziała, ale spróbuj zrobić cmp jako wyrażenie lambda zadeklarowane po deklaracji tablicy punktów.
https://docs.microsoft.com/pl-pl/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160

Odległość od punktu P[0] licz na podstawie różnicy D = P[i] - P[0].

d = sqrt(D.x * D.x + D.y * D.y)
0
int diffSq(int a, int b) {
    return (a - b) * (a - b);
}

int d2(punkt a, punkt b) {
    return diffSq(a.x , b.x) + diffSq(a.y , b.y);
}

bool closerTo(punkt p0, punkt a, punkt b) {
     return d2(p0, a) < d2(p0, b);
}

std::sort(P, P + (n + 1), // tu masz źle nie poprawiłem
     std::bind_front(closerTo, P[0])); // C++20

// albo 
std::sort(P, P + (n + 1), // tu masz źle nie poprawiłem
     [&P](punkt a, punkt b) { return closerTo(P[0], a, b); }); // C++11

1 użytkowników online, w tym zalogowanych: 0, gości: 1