在本教程中,我們將編寫一個程序,用於尋找線段的並集的長度。
我們已經給了線段的起點和終點,我們需要找到線段的並集的長度。
我們將使用的演算法稱為klee's演算法。
讓我們來看看解決這個問題的步驟。
讓我們來看看程式碼。
示範
#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
如果在教程中有任何疑問,請在評論部分提出。
以上是Klee的演算法(線段的並集長度)在C++中的詳細內容。更多資訊請關注PHP中文網其他相關文章!