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

C++ में ट्री के लिए प्रुफर कोड बनाना

प्रुफर कोड एक ट्री को विशिष्ट रूप से पहचानता है जिसे उपयोगकर्ता द्वारा ग्राफ प्रतिनिधित्व के रूप में 1 से p तक लेबल के साथ दिया जाता है। इस ट्री में p (मान उपयोगकर्ता द्वारा दिया गया) नोड लेबल होते हैं। इसमें p - 2 मानों का अनुक्रम होता है।

एल्गोरिदम

Begin
    i, j, ver, edg, minimum, p को इंटीजर डेटाटाइप के रूप में घोषित करें
    "Enter the number of vertexes: " प्रिंट करें
    ver का मान दर्ज करें
    edg = ver-1 इनिशियलाइज़ करें
    EDG[edg][2], DG[ver+1] को इंटीजर डेटाटाइप के रूप में घोषित करें
        DG[ver+1] = {0} से इनिशियलाइज़ करें
    "This tree has (edg का मान) edges for (ver का मान) vertexes" प्रिंट करें
    "There are (edg का मान) pairs of vertexes in the tree" प्रिंट करें
    for(i = 0; i < edg; i++)
        "Enter the value of vertex pair for edge " प्रिंट करें
        "Enter the value of V(1) vertex: " प्रिंट करें
        EDG[i][0] का मान दर्ज करें
        "Enter the value of V(2) vertex: " प्रिंट करें
        EDG[i][1] का मान दर्ज करें
        DG[EDG[i][0]]++
        DG[EDG[i][1]]++
    "The Prufer code for the tree is: { " प्रिंट करें
        for(i = 0; i < ver-2; i++)
            minimum = 10000
            for(j = 0; j < edg; j++)
                if(DG[EDG[j][0]] == 1) then
                    if(minimum > EDG[j][0]) then
                        minimum = EDG[j][0]
                        p = j
                if(DG[EDG[j][1]] == 1) then
                    if(minimum > EDG[j][1]) then
                        minimum = EDG[j][1]
                        p = j
            DG[EDG[p][0]]--
            DG[EDG[p][1]]--
            if(DG[EDG[p][0]] == 0) then
                EDG[p][1] का मान प्रिंट करें
            else
                EDG[p][0] का मान प्रिंट करें
    "}" प्रिंट करें
End

उदाहरण

#include <iostream>
using namespace std;

int main() {
    int i, j, ver, edg, minimum, p;
    cout << "Enter the number of vertexes: ";
    cin >> ver;
    cout << endl;
    edg = ver - 1;
    int EDG[edg][2], DG[ver+1] = {0};
    cout << "This tree has " << edg << " edges for " << ver << " vertexes.\n";
    cout << "There are " << edg << " pairs of vertexes in the tree.\n";
    
    for (i = 0; i < edg; i++) {
        cout << "Enter the value of vertex pair for edge " << i+1 << ":\n";
        cout << "Enter the value of V(1) vertex: ";
        cin >> EDG[i][0];
        cout << "Enter the value of V(2) vertex: ";
        cin >> EDG[i][1];
        DG[EDG[i][0]]++;
        DG[EDG[i][1]]++;
    }
    
    cout << "\nThe Prufer code for the tree is: { ";
    // दिए गए ट्री का प्रुफर कोड प्रिंट करें
    for (i = 0; i < ver-2; i++) {
        minimum = 10000;
        for (j = 0; j < edg; j++) {
            if (DG[EDG[j][0]] == 1) {
                if (minimum > EDG[j][0]) {
                    minimum = EDG[j][0];
                    p = j;
                }
            }
            if (DG[EDG[j][1]] == 1) {
                if (minimum > EDG[j][1]) {
                    minimum = EDG[j][1];
                    p = j;
                }
            }
        }
        DG[EDG[p][0]]--; // चयनित वर्टेक्स को हटाकर उसकी डिग्री 0 करें
        DG[EDG[p][1]]--; // दूसरे वर्टेक्स की डिग्री घटाएं, क्योंकि हमने EDG हटा दिया
        if (DG[EDG[p][0]] == 0)
            cout << EDG[p][1] << " ";
        else
            cout << EDG[p][0] << " ";
    }
    cout << "}";
    return 0;
}

आउटपुट

Enter the number of vertexes: 5
This tree has 4 edges for 5 vertexes.
There are 4 pairs of vertexes in the tree.
Enter the value of vertex pair for edge 1:
Enter the value of V(1) vertex: 2
Enter the value of V(2) vertex: 3
Enter the value of vertex pair for edge 2:
Enter the value of V(1) vertex: 5
Enter the value of V(2) vertex: 6
Enter the value of vertex pair for edge 3:
Enter the value of V(1) vertex: 7
Enter the value of V(2) vertex: 8
Enter the value of vertex pair for edge 4:
Enter the value of V(1) vertex: 9
Enter the value of V(2) vertex: 10
The Prufer code for the tree is: { 4 8 4 }
  1. C++ प्रोग्राम में ट्री में पूर्वज-वंशज संबंध के लिए क्वेरी C++ प्रोग्राम में ट्री में पूर्वज-वंशज संबंध के लिए क्वेरी

    समस्या विवरण इस समस्या में, हमें N वर्टेक्स वाला एक ट्री और Q क्वेरीज दी गई हैं जिनमें प्रत्येक में दो मान i और j होते हैं। हमारा कार्य ट्री में पूर्वज-वंशज संबंध के लिए क्वेरी को हल करने का प्रोग्राम बनाना है। प्रत्येक क्वेरी को हल करने के लिए, हमें जांचना होगा कि नोड i ट्री में नोड j का पूर्वज है

  1. - C++ प्रोग्राम में log1p()

    हमें किसी भी प्रकार का एक वेरिएबल दिया गया है और कार्य log1p() फंक्शन का उपयोग करके परिणाम ढूंढना है। log1p() एक विश्लेषणात्मक फंक्शन है जो एक आर्गुमेंट a लेता है और इसका एक रिटर्न वैल्यू भी होता है। सिंटैक्स double log1p(double x); जहां x [-1, ?] के बीच होता है float log1p(float x); रिटर्न प्रका

  1. C++ प्रोग्राम: sin(x) और cos(x) का मान ज्ञात करना C++ प्रोग्राम: sin(x) और cos(x) का मान ज्ञात करना

    दिए गए कोण (angle) के लिए sin(x) और cos(x) के मान की गणना करना और परिणाम प्रदर्शित करना इस प्रोग्राम का उद्देश्य है। Sin(x) के लिए Sin(x) एक त्रिकोणमितीय फलन है जिसका उपयोग किसी कोण x के मान की गणना के लिए किया जाता है। सूत्र $$\sin (x) = \displaystyle\sum\limits_{k=0}^\infty \frac{(-1)^{k}}{(2k+