이 튜토리얼에서는 선분의 합집합 길이를 구하는 프로그램을 작성하겠습니다.
선분의 시작점과 끝점을 지정했으니 선분의 결합 길이를 찾아야 합니다.
우리가 사용할 알고리즘은 klee의 알고리즘이라고 합니다.
이 문제를 해결하는 단계를 살펴보겠습니다.
코드를 살펴보겠습니다.
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; }
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
6
튜토리얼 중에 궁금한 점이 있으면 댓글 섹션에 문의하세요.
위 내용은 C++의 Klee 알고리즘(선분의 결합 길이)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!