इस ट्यूटोरियल में, हम जार्विस के एल्गोरिथम का उपयोग करके दिए गए बिंदुओं के उत्तल हल को खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे।
उत्तल पतवार सबसे छोटी बहुभुज उत्तल आकृति है जिसमें दिए गए सभी बिंदु या तो आकृति के अंदर की सीमा पर होते हैं।
जार्विस के एल्गोरिथम में, हम सबसे बाईं ओर के बिंदु का चयन करते हैं और रैपिंग पॉइंट्स को दक्षिणावर्त दिशा में घुमाते रहते हैं।
उदाहरण
#include <bits/stdc++.h> using namespace std; //structure of the point struct Point{ int x, y; }; //calculating the position of the points int cal_orientation(Point p, Point q, Point r){ int val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); if (val == 0) return 0; //collinear return (val > 0)? 1: 2; //clock or counterclockwise } //printing convex hull void convexHull(Point points[], int n){ if (n < 3) return; vector<Point> hull; //calculating the leftmost point int l = 0; for (int i = 1; i < n; i++) if (points[i].x < points[l].x) l = i; //moving in the clockwise direction int p = l, q; do{ //adding current point to result hull.push_back(points[p]); q = (p+1)%n; for (int i = 0; i < n; i++){ if (cal_orientation(points[p], points[i], points[q]) == 2) q = i; } p = q; } while (p != l); //if didn't reached the first point for (int i = 0; i < hull.size(); i++) cout << "(" << hull[i].x << ", " << hull[i].y << ")\n"; } int main(){ Point points[] = {{0, 3}, {2, 2}, {1, 1}, {2, 1}, {3, 0}, {0, 0}, {3, 3}}; int n = sizeof(points)/sizeof(points[0]); convexHull(points, n); return 0; }
आउटपुट
(0, 3) (0, 0) (3, 0) (3, 3)