Heim > Backend-Entwicklung > C++ > Hauptteil

Klees Algorithmus (Vereinigungslänge von Liniensegmenten) in C++

WBOY
Freigeben: 2023-08-29 20:37:06
nach vorne
1229 Leute haben es durchsucht

Klees Algorithmus (Vereinigungslänge von Liniensegmenten) in C++

In diesem Tutorial schreiben wir ein Programm, das die Länge der Vereinigung von Liniensegmenten ermittelt.

Wir haben den Startpunkt und den Endpunkt der Liniensegmente angegeben, wir müssen die Länge der Vereinigung der Liniensegmente ermitteln.

Der Algorithmus, den wir verwenden werden, heißt Klees Algorithmus.

Werfen wir einen Blick auf die Schritte zur Lösung dieses Problems.

  • Initialisieren Sie das Array mit den Koordinaten aller Liniensegmente.
  • Initialisieren Sie einen Vektor mit dem Namen „Punkte“, dessen Größe doppelt so groß ist wie die Größe des Liniensegment-Arrays.
  • Durchqueren Sie das Liniensegment-Array.
    • Füllen Sie den ersten Punkt des aktuellen Liniensegments und setzen Sie ihn auf die Position des Index i * 2 des Punktearrays.
    • Füllen Sie den zweiten Punkt des aktuellen Liniensegments und setzen Sie ihn auf die Position des Index i * 2 + 1 des Punktearrays.
  • Sortieren Sie das Punktefeld.
  • Verwenden Sie die Zählervariable, um das Punktearray zu durchlaufen.
    • Wenn der Zähler größer als 0 ist, addieren Sie den ersten Punkt von i und i-1 zum Ergebnis.
    • Wenn es einen zweiten Punkt gibt, verringern Sie den Zähler um 1, andernfalls erhöhen Sie ihn.
  • Ergebnisse zurückgeben.

Beispiel

Werfen wir einen Blick auf den Code.

Demo

#include<bits/stdc++.h>
using namespace std;
int segmentUnionLength(const vector<pair <int,int>> &segments) {
   int n = segments.size();
   vector<pair<int, bool>> points(n * 2);
   for (int i = 0; i < n; i++) {
      points[i*2] = make_pair(segments[i].first, false);
      points[i*2 + 1] = make_pair(segments[i].second, true);
   }
   sort(points.begin(), points.end());
   int result = 0, count = 0;
   for (int i = 0; i < n * 2; i++){
      if (count) {
         result += points[i].first - points[i-1].first;
      }
      points[i].second ? count-- : count++;
   }
   return result;
}
int main() {
   vector<pair<int,int>> segments;
   segments.push_back(make_pair(1, 3));
   segments.push_back(make_pair(2, 7));
   segments.push_back(make_pair(6, 12));
   segments.push_back(make_pair(13, 5));
   cout << segmentUnionLength(segments) << endl;
   return 0;
}
Nach dem Login kopieren

Ausgabe

Wenn Sie den obigen Code ausführen, erhalten Sie die folgenden Ergebnisse.

6
Nach dem Login kopieren

Fazit

Wenn Sie während des Tutorials Fragen haben, stellen Sie diese bitte im Kommentarbereich.

Das obige ist der detaillierte Inhalt vonKlees Algorithmus (Vereinigungslänge von Liniensegmenten) in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage