Heim > Artikel > Backend-Entwicklung > 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.
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; }
Wenn Sie den obigen Code ausführen, erhalten Sie die folgenden Ergebnisse.
6
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!