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

C++ में दिए गए बिंदुओं के समुच्चय के लिए सरल बंद पथ ढूंढना


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

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. C++ में दिए गए बाइनरी ट्री में सबसे बड़ा BST उपट्री खोजें - सेट 1 C++ में दिए गए बाइनरी ट्री में सबसे बड़ा BST उपट्री खोजें - सेट 1

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

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

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

  1. C++ में अनडायरेक्टेड ग्राफ में दिए गए आकार का इंडिपेंडेंट सेट मौजूद है या नहीं खोजें C++ में अनडायरेक्टेड ग्राफ में दिए गए आकार का इंडिपेंडेंट सेट मौजूद है या नहीं खोजें

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