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

न्यूनतम लागत पॉलीगॉन ट्राईएंगुलेशन

जब नॉन-इंटरसेक्टिंग डायगोनल्स एक पॉलीगॉन में ट्राईएंगल बनाते हैं, तो इसे ट्राईएंगुलेशन कहा जाता है। हमारा कार्य ट्राईएंगुलेशन की न्यूनतम लागत ढूंढना है।

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

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

इनपुट: एक पॉलीगॉन के पॉइंट्स
{(0, 0), (1, 0), (2, 1), (1, 2), (0, 2)}

आउटपुट: ट्राईएंगुलेशन की कुल लागत। यहां ट्राईएंगुलेशन की लागत 15.3006 है।

एल्गोरिदम

minCost(polygon, n)

यहां cost() का उपयोग ट्राईएंगल का परिमाप गणना करने के लिए किया जाएगा।

इनपुट: पॉलीगॉन बनाने के लिए पॉइंट्स का सेट, और पॉइंट्स की संख्या
आउटपुट: पॉलीगॉन के ट्राईएंगुलेशन के लिए न्यूनतम लागत

शुरुआत
    यदि n < 3, तो
        वापस 0
    n x n ऑर्डर की टेबल परिभाषित करें
    i := 0
    gap := 0 से n-1 तक, करें
        j := gap से n-1 तक, करें
            यदि j < i+2, तो
                table[i,j] := 0
            अन्यथा
                table[i, j] = ∞
                k := i+1 से j-1 तक, करें
                    val := table[i, k] + table[k, j] + cost(i, j, k)
                    यदि table[i, j] > val, तो
                        table[i, j] := val
                पूर्ण
            i := i + 1
        पूर्ण
    पूर्ण
    वापस table[0, n-1]
अंत

उदाहरण (C++ कोड)

#include <iostream>
#include <cmath>
#include <iomanip>
#define MAX 1000000.0
using namespace std;

struct Point {
    int x, y;
};

double min(double x, double y) {
    return (x <= y) ? x : y;
}

double dist(Point p1, Point p2) {
    return sqrt(pow((p1.x-p2.x),2) + pow((p1.y-p2.y),2));
}

double cost(Point triangle[], int i, int j, int k) {
    Point p1 = triangle[i], p2 = triangle[j], p3 = triangle[k];
    return dist(p1, p2) + dist(p2, p3) + dist(p3, p1);
}

double minimumCost(Point polygon[], int n) {
    if (n < 3)
        return 0;
    
    double table[n][n];
    for (int gap = 0; gap < n; gap++) {
        for (int i = 0, j = gap; j < n; i++, j++) {
            if (j < i+2)
                table[i][j] = 0.0;
            else {
                table[i][j] = MAX;
                for (int k = i+1; k < j; k++) {
                    double val = table[i][k] + table[k][j] + cost(polygon,i,j,k);
                    if (table[i][j] > val)
                        table[i][j] = val;
                }
            }
        }
    }
    return table[0][n-1];
}

int main() {
    Point points[] = {{0, 0}, {1, 0}, {2, 1}, {1, 2}, {0, 2}};
    int n = 5;
    cout << "The minimumcost: " << minimumCost(points, n);
}

आउटपुट

The minimumcost: 15.3006
  1. पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास एक मान n और cuts नामक एक सरणी है। मान लीजिए n इकाई लंबाई की एक लकड़ी की छड़ी है। छड़ी 0 से n तक लेबल की गई है। यहां cuts[i] एक स्थिति दर्शाता है जहां हम काट सकते हैं। हमें कटौती क्रम में करनी चाहिए, लेकिन हम कटौती के क्रम को अपनी इच्छानुसार बदल सकते हैं। यहां एक कटौती की लागत का

  1. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

    मान लीजिए हमारे पास points नामक एक ऐरे है जिसमें कुछ पॉइंट्स (x, y) के रूप में हैं। अब दो पॉइंट्स (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच की मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी पॉइंट्स को जोड़ने की न्यूनतम लागत ढूंढनी है। उदाहरण के लिए, यदि इनपुट है points = [(0,0),(

  1. पायथन में न्यूनतम लागत से शहरों को जोड़ना पायथन में न्यूनतम लागत से शहरों को जोड़ना

    मान लीजिए 1 से N तक नंबर वाले N शहर हैं। हमारे पास कनेक्शन्स हैं, जहां प्रत्येक कनेक्शन [i] [city1, city2, cost] है जो city1 और city2 को एक साथ जोड़ने की लागत दर्शाता है। हमें न्यूनतम लागत ढूंढनी है ताकि शहरों के प्रत्येक जोड़े के लिए, कनेक्शन्स का एक पथ मौजूद हो (संभवतः लंबाई 1 का) जो उन दो शहरों क