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

C/C++ प्रोग्राम फॉर सबसेट सम (बैट्रैकिंग)


बैट्रैकिंग डायनामिक प्रोग्रामिंग समस्याओं को हल करने की एक तकनीक है। यह चरण दर चरण काम करता है और उन पथों को अस्वीकार करता है जो समाधान की ओर नहीं ले जाते और पिछली स्थिति पर वापस आ जाता है (ट्रैकबैक)।

सबसेट सम समस्या में, हमें एक सेट का सबसेट इस तरह ढूंढना होता है कि इस सबसेट के तत्व दिए गए नंबर K तक जुड़ जाएं। सेट के सभी तत्व सकारात्मक और अद्वितीय हैं (कोई डुप्लिकेट तत्व मौजूद नहीं हैं)।

इसके लिए, हम सबसेट बनाएंगे और जांचेंगे कि क्या उनका योग दी गई संख्या k के बराबर है। आइए एक समाधान बनाने के लिए एक प्रोग्राम देखें।

उदाहरण

#include <stdio.h>
#include <stdlib.h>

static int total_nodes;

void printValues(int A[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%*d", 5, A[i]);
    }
    printf("\n");
}

void subset_sum(int s[], int t[], int s_size, int t_size, int sum, int ite, int const target_sum) {
    total_nodes++;
    if (target_sum == sum) {
        printValues(t, t_size);
        subset_sum(s, t, s_size, t_size - 1, sum - s[ite], ite + 1, target_sum);
        return;
    } else {
        for (int i = ite; i < s_size; i++) {
            t[t_size] = s[i];
            subset_sum(s, t, s_size, t_size + 1, sum + s[i], i + 1, target_sum);
        }
    }
}

void generateSubsets(int s[], int size, int target_sum) {
    int* tuplet_vector = (int*)malloc(size * sizeof(int));
    subset_sum(s, tuplet_vector, size, 0, 0, 0, target_sum);
    free(tuplet_vector);
}

int main() {
    int set[] = {5, 6, 12, 54, 2, 20, 15};
    int size = sizeof(set) / sizeof(set[0]);
    printf("The set is ");
    printValues(set, size);
    generateSubsets(set, size, 25);
    printf("Total Nodes generated %d\n", total_nodes);
    return 0;
}

आउटपुट

The set is 5 6 12 54 2 20 15
5 6 12 2
5 20
Total Nodes generated 127
  1. C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers) C प्रोग्राम: आर्मस्ट्रांग नंबर्स (Armstrong Numbers)

    हमें उपयोगकर्ता द्वारा दर्ज संख्या n की जांच करनी है कि यह आर्मस्ट्रांग संख्या है या नहीं। एक आर्मस्ट्रांग संख्या वह है जिसके अंकों को अंकों की संख्या (क्रम) की घात तक बढ़ाकर उनका योग करने पर मूल संख्या प्राप्त होती है। सूत्र: wxyz... = wⁿ + xⁿ + yⁿ + zⁿ + ... एल्गोरिदम START फंक्शन power(a, b): a^b

  1. C++ में सरणी के एलिमेंट्स का गुणनफल C++ में सरणी के एलिमेंट्स का गुणनफल

    पूर्णांक एलिमेंट्स की एक सरणी दी गई है और कार्य सरणी के एलिमेंट्स को गुणा करना और प्रदर्शित करना है। उदाहरण इनपुट-: arr[]={1,2,3,4,5,6,7} आउटपुट-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 इनपुट-: arr[]={3, 4,6, 2, 7, 8, 4} आउटपुट-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 नीचे दिए गए प्रोग्राम में उपयोग किया गया द

  1. C++ में ऑक्टल से डेसिमल रूपांतरण C++ में ऑक्टल से डेसिमल रूपांतरण

    एक ऑक्टल संख्या इनपुट के रूप में दी गई है, कार्य दी गई ऑक्टल संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में डेसिमल संख्याओं को आधार 10 के साथ दर्शाया जाता है और ऑक्टल संख्या को आधार 8 के साथ दर्शाया जाता है जो अंक 0 से 7 तक होती है जबकि डेसिमल संख्याएं 0-9 से शुरू होने वाला कोई भी संख्यात्मक अंक