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

C++ में उत्तल हल मोनोटोन श्रृंखला एल्गोरिथम

इस ट्यूटोरियल में, हम दिए गए बिंदुओं के उत्तल पतवार को खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे।

उत्तल पतवार सबसे छोटी बहुभुज उत्तल आकृति है जिसमें दिए गए सभी बिंदु या तो आकृति के अंदर की सीमा पर होते हैं।

उदाहरण

#include <bits/stdc++.h>
#define llu long long int
using namespace std;
//structure for the given point
struct Point {
   llu x, y;
   bool operator<(Point p){
   return x < p.x || (x == p.x && y < p.y);
   }
};
//calculating the cross product of self made vectors
llu calc_crossproduct(Point O, Point A, Point B){
   return (A.x - O.x) * (B.y - O.y)
   - (A.y - O.y) * (B.x - O.x);
}
//calculating the points on boundary
vector<Point> convex_hull(vector<Point> A){
   int n = A.size(), k = 0;
   if (n <= 3)
   return A;
   vector<Point> ans(2 * n);
   //sorting points lexicographically
   sort(A.begin(), A.end());
   for (int i = 0; i < n; ++i) {
      while (k >= 2 && calc_crossproduct(ans[k - 2],
      ans[k - 1], A[i]) <= 0)
      k--;
      ans[k++] = A[i];
   }
   //building upper hull
   for (size_t i = n - 1, t = k + 1; i > 0; --i) {
      while (k >= t && calc_crossproduct(ans[k - 2],
      ans[k - 1], A[i - 1]) <= 0)
      k--;
      ans[k++] = A[i - 1];
   }
   //resizing the given array
   ans.resize(k - 1);
   return ans;
}
int main(){
   vector<Point> points;
   points.push_back({ 0, 3 });
   points.push_back({ 2, 2 });
   points.push_back({ 1, 1 });
   points.push_back({ 2, 1 });
   points.push_back({ 3, 0 });
   points.push_back({ 0, 0 });
   points.push_back({ 3, 3 });
   vector<Point> ans = convex_hull(points);
   for (int i = 0; i < ans.size(); i++)
   cout << "(" << ans[i].x << ", "
   << ans[i].y << ")" << endl;
   return 0;
}

आउटपुट

(0, 0)
(3, 0)
(3, 3)
(0, 3)

  1. C/C++ में बर्कले का एल्गोरिथम

    बर्कले का एल्गोरिथ्म एक एल्गोरिथ्म है जिसका उपयोग वितरित प्रणालियों में घड़ी के सिंक्रनाइज़ेशन के लिए किया जाता है। इस एल्गोरिथम का उपयोग उन मामलों में किया जाता है जब वितरित नेटवर्क के कुछ या सभी सिस्टम में इनमें से कोई एक समस्या होती है - उ. मशीन के पास सटीक समय स्रोत नहीं है। B. नेटवर्क या

  1. सी ++ में बेलमैन फोर्ड एल्गोरिदम?

    बेलमैन फोर्ड एल्गोरिथम गतिशील प्रोग्रामिंग एल्गोरिथम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है, जिसे शुरुआती शीर्ष के रूप में माना जाता है। यह एल्गोरिथ्म पुनरावृत्त विधि का अनुसरण करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। भारित ग्राफ़ पर बेलमैन फोर्ड एल्

  1. उत्तल हल खोजने के लिए ग्राहम स्कैन एल्गोरिदम को लागू करने के लिए सी ++ कार्यक्रम

    उत्तल पतवार न्यूनतम बंद क्षेत्र है जो सभी दिए गए डेटा बिंदुओं को कवर कर सकता है। ग्राहम के स्कैन एल्गोरिथम उत्तल पतवार के कोने बिंदु पाएंगे। इस एल्गोरिथम में, सबसे पहले सबसे कम बिंदु चुना जाता है। वह बिंदु उत्तल पतवार का प्रारंभिक बिंदु है। शेष n-1 शीर्षों को प्रारंभ बिंदु से घड़ी की विपरीत दिशा के