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

सी ++ में दिए गए बिंदुओं के सेट के लिए सरल बंद पथ खोजें

विचार करें कि हमारे पास बिंदुओं का एक सेट है। हमें सभी बिंदुओं को कवर करते हुए एक सरल बंद रास्ता खोजना होगा। मान लीजिए कि बिंदु नीचे की तरह हैं, और अगली छवि उन बिंदुओं पर एक बंद पथ बना रही है।

सी ++ में दिए गए बिंदुओं के सेट के लिए सरल बंद पथ खोजें

रास्ता पाने के लिए हमें इन चरणों का पालन करना होगा -

  • नीचे बाएँ बिंदु को P के रूप में खोजें

  • अन्य n - 1 बिंदु को P के चारों ओर वामावर्त ध्रुवीय कोण के आधार पर क्रमबद्ध करें, यदि दो बिंदुओं के ध्रुवीय कोण समान हैं, तो उन्हें सबसे कम दूरी के रूप में रखें

  • अंक की क्रमबद्ध सूची को पार करें, फिर पथ बनाएं

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Point {
   public:
   int x, y;
};
Point p0;
int euclid_dist(Point p1, Point p2) {
   return (p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y);
}
int orientation(Point p1, Point p2, Point p3) {
   int val = (p2.y - p1.y) * (p3.x - p2.x) - (p2.x - p1.x) * (p3.y - p2.y);
   if (val == 0) return 0; // colinear
   return (val > 0)? 1: 2; // clockwise or counterclock wise
}
int compare(const void *vp1, const void *vp2) {
   Point *p1 = (Point *)vp1;
   Point *p2 = (Point *)vp2;
   int o = orientation(p0, *p1, *p2);
   if (o == 0)
   return (euclid_dist(p0, *p2) >= euclid_dist(p0, *p1))? -1 : 1;
   return (o == 2)? -1: 1;
}
void findClosedPath(Point points[], int n) {
   int y_min = points[0].y, min = 0;
   for (int i = 1; i < n; i++) {
      int y = points[i].y;
      if ((y < y_min) || (y_min == y && points[i].x < points[min].x))
      y_min = points[i].y, min = i;
   }
   swap(points[0], points[min]);
   p0 = points[0];
   qsort(&points[1], n-1, sizeof(Point), compare); //sort on polar angle
   for (int i=0; i<n; i++)
   cout << "(" << points[i].x << ", "<< points[i].y <<"), ";
}
int main() {
   Point points[] = {{0, 3}, {1, 1}, {2, 2}, {4, 4},{0, 0}, {1, 2}, {3, 1}, {3, 3}};
   int n = sizeof(points)/sizeof(points[0]);
   findClosedPath(points, n);
}

आउटपुट

(0, 0), (3, 1), (1, 1), (2, 2), (3, 3), (4, 4), (1, 2), (0, 3),

  1. किसी दिए गए बाइनरी ट्री में सबसे बड़ा BST सबट्री खोजें - C++ में 1 सेट करें

    इस समस्या में हमें एक बाइनरी ट्री BT दिया जाता है। हमारा काम है किसी दिए गए बाइनरी ट्री में सबसे बड़ा BST सबट्री ढूंढना । बाइनरी ट्री एक विशेष डेटा संरचना है जिसका उपयोग डेटा भंडारण उद्देश्यों के लिए किया जाता है। बाइनरी ट्री की एक विशेष शर्त होती है कि प्रत्येक नोड में अधिकतम दो बच्चे हो सकते हैं।

  1. C++ का प्रयोग करते हुए दिए गए बिंदुओं से संभव चतुर्भुजों की संख्या ज्ञात कीजिए

    एक चतुर्भुज यूक्लिडियन समतल ज्यामिति में चार शीर्षों और चार किनारों वाला एक बहुभुज बनाता है। नाम 4-गॉन आदि। चतुर्भुज के अन्य नामों में शामिल हैं और कभी-कभी उन्हें एक वर्ग, प्रदर्शन शैली आदि के रूप में भी जाना जाता है। इस लेख में, हम दिए गए बिंदुओं से संभव चतुर्भुजों की संख्या का पता लगाने के तरीकों

  1. पता लगाएँ कि क्या एक अप्रत्यक्ष ग्राफ़ में C++ में दिए गए आकार का एक स्वतंत्र सेट है

    अवधारणा किसी दिए गए अप्रत्यक्ष ग्राफ के संबंध में, सत्यापित करें कि क्या इसमें l आकार का एक स्वतंत्र सेट है। यदि आकार का एक स्वतंत्र सेट मौजूद है तो हां प्रिंट करें, अन्यथा नहीं प्रिंट करें। यह ध्यान दिया जाना चाहिए कि ग्राफ में एक स्वतंत्र सेट को शिखर के एक सेट के रूप में परिभाषित किया जाता है जो