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

ग्राहम स्कैन एल्गोरिथम


उत्तल पतवार न्यूनतम बंद क्षेत्र है जो सभी दिए गए डेटा बिंदुओं को कवर कर सकता है।

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

शेष बिंदुओं से, उन्हें स्टैक में धकेलें। और स्टैक से आइटम को एक-एक करके हटा दें, जब स्टैक टॉप पॉइंट, सेकेंड टॉप पॉइंट और नए चयनित पॉइंट पॉइंट्स के लिए ओरिएंटेशन एंटी-क्लॉकवाइज नहीं है, तो चेक करने के बाद, पॉइंट्स [i] को स्टैक में डालें।

इनपुट और आउटपुट

इनपुट:अंकों का सेट:{(-7,8), (-4,6), (2,6), (6,4), (8,6), (7,-2), ( 4,-6), (8,-7),(0,0), (3,-2),(6,-10),(0,-6),(-9,-5),(- 8,-2),(-8,0),(-10,3),(-2,2),(-10,4)}आउटपुट:उत्तल पतवार के सीमा बिंदु हैं:(-9, -5) (-10, 3) (-10, 4) (-7, 8) (8, 6) (8, -7) (6, -10)

एल्गोरिदम

findConvexHull(points, n)

इनपुट - अंकों का समूह, अंकों की संख्या।

आउटपुट - उत्तल पतवार के सीमा बिंदु।

शुरू minY:=पॉइंट्स[0].y min:=0 for i :=1 to n-1 do y :=points[i].y if y  

उदाहरण

#शामिल करें#शामिल करें // दूसरे दो बिंदुओं के लिए उपयोग किया जाता है सेकेंडटॉप (स्टैक <पॉइंट> और एसटीके) {बिंदु अस्थायी बिंदु =stk.top (); stk.pop (); बिंदु रेस =stk.top (); // दूसरा शीर्ष तत्व stk.push (tempPoint) प्राप्त करें; // पिछले शीर्ष को फिर से दबाएं res;}int SquaredDist(point p1, point p2) {रिटर्न ((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y )*(p1.y-p2.y));}int दिशा (बिंदु a, बिंदु b, बिंदु c) { int val =(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y -द्वारा); अगर (वैल ==0) वापसी 0; // कॉलिनियर और अगर (वैल <0) रिटर्न 2; // वामावर्त दिशा वापसी 1; // दक्षिणावर्त दिशा} int COMP (स्थिरांक शून्य * बिंदु 1, स्थिरांक शून्य * बिंदु 2) {बिंदु * p1 =(बिंदु *) बिंदु 1; बिंदु *p2 =(बिंदु*)बिंदु2; int dir =दिशा (p0, *p1, *p2); अगर (डीआईआर ==0) वापसी (स्क्वेर्डडिस्ट (पी 0, * पी 2)> =स्क्वायरडिस्ट (पी 0, * पी 1))? -1:1; वापसी (डीआईआर ==2)? -1 1; }वेक्टर<बिंदु>findConvexHull(point points[], int n) {वेक्टर<पॉइंट> उत्तलHullPoints; int minY =अंक [0]। y, न्यूनतम =0; for(int i =1; i stk; stk.push (अंक [0]); stk.push (अंक [1]); stk.push (अंक [2]); for(int i =3; i परिणाम; परिणाम =findConvexHull (अंक, n); cout <<"उत्तल पतवार के सीमा बिंदु हैं:"< ::इसे पुनरावर्तक; for(it =result.begin(); it!=result.end(); it++) cout <<"(" <x <<"," <y <<") "; } 

आउटपुट

उत्तल पतवार के सीमा बिंदु हैं:(-9, -5) (-10, 3) (-10, 4) (-7, 8) (8, 6) (8, -7) (6, - 10)

  1. फोर्ड फुलकर्सन एल्गोरिथम

    फोर्ड-फुलकर्सन एल्गोरिथम का उपयोग किसी दिए गए ग्राफ में प्रारंभ शीर्ष से सिंक शीर्ष तक अधिकतम प्रवाह का पता लगाने के लिए किया जाता है। इस ग्राफ में हर किनारे की क्षमता है। स्रोत और सिंक नाम के दो शीर्ष दिए गए हैं। स्रोत शीर्ष में सभी बाहरी किनारे हैं, कोई अंदरूनी किनारा नहीं है, और सिंक में सभी अंदर

  1. फ्लोयड वारशाल एल्गोरिथम

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

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

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