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

सी ++ प्रोग्राम बाइनरी सर्च का उपयोग करके ग्राफ के न्यूनतम वर्टेक्स कवर आकार को खोजने के लिए

इस लेख में, हम द्विआधारी खोज का उपयोग करके दिए गए ग्राफ़ के न्यूनतम शीर्ष कवर आकार को खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे।

न्यूनतम शीर्ष आवरण दिए गए ग्राफ़ के शीर्षों का एक समूह है, जिससे कि ग्राफ़ का प्रत्येक किनारा उस सेट के किसी भी शीर्ष पर आपतित हो।

उदाहरण के लिए, ग्राफ़ लें

2 ---- 4 ---- 6
|     |
|     |
|     |
3 ---- 5

यहां, न्यूनतम शीर्ष आवरण में शीर्ष 3 और 4 शामिल हैं। ग्राफ़ के सभी किनारे ग्राफ़ के 3 या 4 शीर्षों पर आपतित होते हैं।

उदाहरण

#include<bits/stdc++.h>
using namespace std;
#define max 15
//array to store graph
bool arr[max][max];
//check if minimum vertex cover exists
bool check_cover(int V, int k, int E) {
   int set = (1 << k) - 1;
   int limit = (1 << V);
   //to mark the edges of size 'k'
   bool vis[max][max];
   while (set < limit) {
      //resetting the vertex cover for each iteration
      memset(vis, 0, sizeof vis);
      int count = 0;
      //checking the values which has a high value
      for (int j = 1, v = 1 ; j < limit ; j = j << 1, v++) {
         if (set & j) {
            //marking the edges visited
            for (int k = 1 ; k <= V ; k++) {
               if (arr[v][k] && !vis[v][k]) {
                  vis[v][k] = 1;
                  vis[k][v] = 1;
                  count++;
               }
            }
         }
      }
      //if all the edges are covered
      if (count == E)
         return true;
      int c = set & -set;
      int r = set + c;
      set = (((r^set) >> 2) / c) | r;
   }
   return false;
}
//to find minimum vertex cover
int find_cover(int n, int m) {
   //performing binary search
   int left = 1, right = n;
   while (right > left){
      int mid = (left + right) >> 1;
      if (check_cover(n, mid, m) == false)
         left = mid + 1;
      else
         right = mid;
   }
   return left;
}
//inserting edge in the graph
void add_edge(int u, int v) {
   arr[u][v] = 1;
   arr[v][u] = 1;
}
int main() {
   memset(arr, 0, sizeof arr);
   int V = 6, E = 5;
   add_edge(2, 3);
   add_edge(2, 4);
   add_edge(3, 5);
   add_edge(4, 5);
   add_edge(4, 6);
   cout << "Size of Minimum Vertex Cover : " << find_cover(V, E) << endl;
   return 0;
}

आउटपुट

Size of Minimum Vertex Cover : 2

  1. C++ में k सबलिस्ट्स की न्यूनतम सबसे बड़ी राशि खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और दूसरा मान k है। हम सूची को k गैर-रिक्त उप-सूचियों में विभाजित कर सकते हैं। हमें k उप-सूचियों का न्यूनतम सबसे बड़ा योग ज्ञात करना है। इसलिए, यदि इनपुट संख्या =[2, 4, 3, 5, 12] k =2 की तरह है, तो आउटपुट 14 होगा, क्योंकि हम सूची को

  1. C++ में बाइनरी सर्च ट्री के इनऑर्डर उत्तराधिकारी को खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री BST है और एक नोड का दूसरा मान है, तो हमें BST में उस नोड के इन-ऑर्डर सक्सेसर को खोजना होगा। जैसा कि हम सभी जानते हैं कि एक नोड p का उत्तराधिकारी वह नोड होता है जिसकी सबसे छोटी कुंजी p के मान से अधिक होती है। तो, अगर इनपुट पसंद है और p =1, तो आउटपुट 2 हो

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत