Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में क्ली का एल्गोरिदम (रेखा के खंडों के संघ की लंबाई)


इस ट्यूटोरियल में, हम एक ऐसा प्रोग्राम लिखेंगे जो रेखा के खंडों के संघ की लंबाई ढूंढता है।

हमें रेखा खंड के प्रारंभिक और अंतिम बिंदु दिए गए हैं और हमें रेखा के खंडों के संघ की लंबाई ज्ञात करनी है।

हम जिस एल्गोरिदम का उपयोग करने जा रहे हैं उसे क्ली का एल्गोरिदम कहा जाता है।

आइए इस समस्या को हल करने के चरण देखते हैं।

  • सभी खंडों के निर्देशांकों के साथ सरणी इनिशियलाइज़ करें।
  • खंडों की सरणी के दोगुने आकार का एक वेक्टर पॉइंट्स इनिशियलाइज़ करें।
  • खंडों की सरणी पर पुनरावृति करें।
    • पॉइंट्स सरणी में इंडेक्स i * 2 पर वर्तमान खंड का पहला बिंदु और false भरें।
    • पॉइंट्स सरणी में इंडेक्स i * 2 + 1 पर वर्तमान खंड का दूसरा बिंदु और true भरें।
  • पॉइंट्स सरणी को सॉर्ट करें।
  • एक काउंटर वेरिएबल के साथ पॉइंट्स सरणी पर पुनरावृति करें।
    • यदि काउंटर 0 से बड़ा है, तो i और i - 1 के पहले बिंदुओं का अंतर परिणाम में जोड़ें।
    • यदि दूसरा बिंदु है तो काउंटर घटाएं अन्यथा बढ़ाएं।
  • परिणाम वापस करें।

उदाहरण

आइए कोड देखते हैं।

#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

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उन्हें कमेंट सेक्शन में लिखें।


  1. C++ में एक रेखा पर अधिकतम बिंदु C++ में एक रेखा पर अधिकतम बिंदु

    मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -तो 4 बिंदु हैंइसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएंans := 2i को 1 से n - 1 तक की रेंज मेंcount := 0इं

  1. C++ में कंप्यूटर ग्राफिक्स में पॉइंट क्लिपिंग एल्गोरिदम C++ में कंप्यूटर ग्राफिक्स में पॉइंट क्लिपिंग एल्गोरिदम

    कंप्यूटर ग्राफिक्स कंप्यूटर स्क्रीन पर छवियों और ग्राफिक्स को बनाने से संबंधित है। यहां, हम स्क्रीन को 2-D निर्देशांक प्रणाली के रूप में मानते हैं। यह निर्देशांक प्रणाली शीर्ष-बाएं (0,0) से शुरू होती है और नीचे-दाएं पर समाप्त होती है। व्यूइंग प्लेन कंप्यूटर ग्राफिक्स में ग्राफिक्स बनाने के लिए परिभ

  1. C++ में रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है या बाहर है जांचें C++ में रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है या बाहर है जांचें

    समस्या विवरण एक वृत्त (केंद्र h,k और त्रिज्या r) और रेखा (ax+by+c=0) दी गई है। जांचें कि रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है, या बाहर है। विधि केंद्र से रेखा की लंबवत दूरी P निकालें: P = |ah + bk + c| / √(a²+b²) P की त्रिज्या r से तुलना करें: r → बाहर P = r → स्पर्श करती है