Загрузка...

Практическое задание C++

Тема в разделе C/C++ создана пользователем Morzhik89 8 фев 2023. (поднята 12 фев 2023) 266 просмотров

  1. Morzhik89
    Morzhik89 Автор темы 8 фев 2023 Либо ты льешь трафик, либо ты являешься трафиком 117 22 окт 2019
    Цель работы. Построить выпуклый многоугольник по алгоритму Джарвиса, методу обхода Грэхема
    Постановка задачи. Пусть на плоскости дано множество точек. Нужно построить выпуклый многоугольник, чтобы для любой точки из заданного множества было верно одно из трех утверждений:
    а) точка является вершиной построенного многоугольника;
    б) точка принадлежит одной из сторон многоугольника;
    в) точка лежит внутри многоугольника.
    [IMG]
     
    8 фев 2023 Изменено
  2. NightAngel
    NightAngel 11 фев 2023 7 13 дек 2021
    могу сделать, напиши в тг, поговорим подробнее.
     
  3. Darkway01
    Darkway01 13 фев 2023 С научной точки зрения традиции для идиотов. 23 14 апр 2021
    Вот
    Код
    #include <bits/stdc++.h>
    using namespace std;

    struct Point {
    int x, y;
    bool operator < (const Point &p) const {
    return x < p.x || (x == p.x && y < p.y);
    }
    };

    int cross(Point A, Point B) {
    return A.x * B.y - A.y * B.x;
    }

    vector<Point> jarvis(vector<Point> P) {
    int n = P.size();
    vector<Point> H(2 * n);

    sort(P.begin(), P.end());

    int k = 0;
    for (int i = 0; i < n; i++) {
    while (k >= 2 && cross(H[k - 2] - H[k - 1], P[i] - H[k - 1]) < 0)
    k--;
    H[k++] = P[i];
    }

    for (int i = n - 2, t = k + 1; i >= 0; i--) {
    while (k >= t && cross(H[k - 2] - H[k - 1], P[i] - H[k - 1]) < 0)
    k--;
    H[k++] = P[i];
    }

    H.resize(k - 1);
    return H;
    }

    int main() {
    int n;
    cin >> n;
    vector<Point> P(n);
    for (int i = 0; i < n; i++)
    cin >> P[i].x >> P[i].y;

    vector<Point> H = jarvis(P);
    for (int i = 0; i < H.size(); i++)
    cout << H[i].x << " " << H[i].y << endl;
    return 0;
    }
     
    1. Morzhik89 Автор темы
Загрузка...
Top