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

C++ प्रोग्राम: Dominating Set Problem हल करना


यह C++ प्रोग्राम Dominating Set Problem को हल करता है। एक ग्राफ में डोमिनेटिंग सेट वर्टेक्स का एक सबसेट होता है जिसमें ग्राफ का प्रत्येक वर्टेक्स या तो सेट में होता है या सेट के कम से कम एक वर्टेक्स से आसन्न होता है।

एल्गोरिदम

शुरुआत
  1. वर्टेक्स और एज की संख्या इनपुट लें, साथ ही एज के एंडपॉइंट भी।
  2. फंक्शन dominant():
     - वेक्टर Set डिक्लेयर करें।
     - कोई भी एज लें जो वर्टेक्स X और Y को जोड़ता है।
     - X और Y के बीच के एक वर्टेक्स को सेट S में जोड़ें।
     - X से जुड़े सभी एज डिलीट करें।
समाप्ति

उदाहरण कोड

#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> graph;
bool visited[10001];
int i, j;

vector<int> dominant(int v, int e) {
    vector<int> domSet;
    
    for (i = 0; i < v; i++) {
        if (!visited[i]) {
            domSet.push_back(i); // वर्टेक्स जोड़ें
            visited[i] = true;
            
            for (j = 0; j < (int)graph[i].size(); j++) {
                if (!visited[graph[i][j]]) {
                    visited[graph[i][j]] = true;
                    break;
                }
            }
        }
    }
    return domSet;
}

int main() {
    int v, e, a, b;
    
    cout << "Enter number of vertices: ";
    cin >> v;
    cout << "Enter number of Edges: ";
    cin >> e;
    
    graph.resize(v);
    memset(visited, 0, sizeof(visited));
    
    for (i = 0; i < e; i++) {
        cout << "Enter the end-points of edge " << i+1 << " : ";
        cin >> a >> b;
        a--; b--; // 0-based indexing
        graph[a].push_back(b);
        graph[b].push_back(a);
    }
    
    vector<int> domSet = dominant(v, e);
    
    cout << "The Dominant Set is:\n";
    for (i = 0; i < (int)domSet.size(); i++)
        cout << domSet[i] + 1 << " "; // 1-based आउटपुट के लिए
    
    return 0;
}

आउटपुट

Enter number of vertices: 7
Enter number of Edges: 6
Enter the end-points of edge 1 : 1 2
Enter the end-points of edge 2 : 2 3
Enter the end-points of edge 3 : 3 4
Enter the end-points of edge 4 : 4 5
Enter the end-points of edge 5 : 6 7
Enter the end-points of edge 6 : 4 5
The Dominant Set is: 1 3 5 6

व्याख्या: यह प्रोग्राम एक लालची दृष्टिकोण (greedy approach) का उपयोग करता है। यह अनविजिटेड वर्टेक्स को डोमिनेटिंग सेट में जोड़ता है और उसके सभी पड़ोसियों को विजिटेड मार्क कर देता है। ध्यान दें कि यह एक सन्निकटन एल्गोरिदम है क्योंकि Dominating Set Problem NP-Complete है।

  1. - C++ प्रोग्राम: 0-1 नैपसैक समस्या हल करना

    0-1 नैपसैक समस्या में, आइटम्स का एक सेट दिया जाता है, प्रत्येक का एक वजन और एक वैल्यू होती है। हमें प्रत्येक आइटम की संख्या निर्धारित करने की आवश्यकता होती है जिसे एक संग्रह में शामिल किया जाए ताकि कुल वजन दी गई सीमा से कम या बराबर हो और कुल वैल्यू जितना संभव हो उतना बड़ा हो। इनपुट Value = [10, 20

  1. - शेकर सॉर्ट करने के लिए C++ प्रोग्राम

    शेकर सॉर्ट का उपयोग दिए गए डेटा को सॉर्ट करने के लिए किया जाता है। बबल सॉर्ट के विपरीत, शेकर सॉर्ट सरणी को दोनों दिशाओं में ऑर्डर करता है। इस एल्गोरिदम की सबसे खराब जटिलता O(n^2) है। एल्गोरिदम शुरुआत    ShakerSort() फ़ंक्शन में arr डेटा की सरणी और n मानों की संख्या, आर्गुमेंट सूची में होती

  1. - डायनामिक प्रोग्रामिंग का उपयोग करके नैपसैक समस्या हल करने के लिए C++ प्रोग्राम

    यह डायनामिक प्रोग्रामिंग का उपयोग करके 0-1 नैपसैक समस्या को हल करने के लिए एक C++ प्रोग्राम है। 0-1 नैपसैक समस्या में, आइटम्स का एक सेट दिया जाता है, प्रत्येक का एक वजन और एक मूल्य होता है। हमें प्रत्येक आइटम की संख्या निर्धारित करनी होती है जिसे एक संग्रह में शामिल किया जाए ताकि कुल वजन दी गई सीमा