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

C++ प्रोग्राम यह जांचने के लिए कि दी गई निर्भरता से सभी कार्यों को पूरा करना संभव है या नहीं

इस लेख में, हम यह जांचने के लिए एक कार्यक्रम पर चर्चा करेंगे कि क्या दिए गए सभी कार्यों को दिए गए पूर्वापेक्षाओं के आधार पर पूरा करना संभव है।

उदाहरण के लिए, मान लें कि हमें तीन कार्य दिए गए हैं और पूर्वापेक्षाएँ हैं [[1, 0], [2, 1], [3, 2]]।

( [1,0] का मतलब है कि '1' टास्क लेने के लिए '0' टास्क पहले पूरा करना होगा।)

फिर, इस उदाहरण में चूंकि '0' कार्य की कोई पूर्वापेक्षा नहीं है, इसे पहले पूरा किया जा सकता है। तब '1' कार्य पूरा किया जा सकता है, क्योंकि '0' कार्य पूरा हो चुका है। इसी प्रकार '2' और '3' दोनों कार्य भी पूरे किए जा सकते हैं। तो इस मामले में जवाब "सच" होगा।

ग्राफ एल्गोरिदम का उपयोग करके इस समस्या को हल किया जा सकता है। चूंकि, ग्राफ़ एल्गोरिदम के साथ सरणियाँ सुविधाजनक नहीं हैं, इसलिए हम इसे एक ग्राफ़ में बदल देंगे। यह कार्य 'm' से कार्य 'n' में बढ़त बनाकर किया जा सकता है, यदि कार्य 'n' में 'm' के पूरा होने पर निर्भरता है।

एक बार ग्राफ बन जाने के बाद हम DFS का उपयोग कर सकते हैं। उसमें, हम किसी विशेष नोड से शुरू कर सकते हैं और फिर उसके निकटतम नोड पर जा सकते हैं और फिर उस नोड के निकटतम नोड आदि पर जा सकते हैं। यदि हम एक नोड का सामना करते हैं जिसे पहले देखा गया है, तो एक चक्र बनाया जाता है और हम "गलत" लौटाते हैं। अन्यथा, एक बार जब हम एक टर्मिनल पर पहुंच जाते हैं, तो इस पैटर्न का फिर से एक और नोड द्वारा अनुसरण किया जाएगा, जब तक कि ग्राफ में सभी नोड्स का दौरा नहीं किया जाता है। यदि सभी नोड्स पहुंच गए हैं, तो हम "सत्य" लौटाएंगे।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
// Converts list into graph
vector<unordered_set<int> > make_graph(int Tasks, vector<pair<int, int> >& dependencies) {
   vector<unordered_set<int> > graph(Tasks);
   for (auto pre : dependencies)
      graph[pre.second].insert(pre.first);
   return graph;
}
//to check if all the nodes are visited
bool cycle(vector<unordered_set<int> >& graph, int node, vector<bool>& onway, vector<bool>& visited) {
   if (visited[node])
      return false;
   onway[node] = visited[node] = true;
   for (int near : graph[node]) {
      if (onway[near] || cycle(graph, near, onway, visited))
         return true;
   }
   return onway[node] = false;
}
//to check if all the tasks can be completed
bool canFinish(int Tasks, vector<pair<int, int> >& dependencies) {
   vector<unordered_set<int>>graph = make_graph(Tasks, dependencies);
   vector<bool> onway(Tasks, false), visited(Tasks, false);
   for (int i = 0; i < Tasks; i++) {
      if (!visited[i] && cycle(graph, i, onway, visited))
         return false;
   }
   return true;
}
int main() {
   int Tasks = 6;
   vector<pair<int, int >> dependencies;
   dependencies.push_back(make_pair(1, 0));
   dependencies.push_back(make_pair(2, 1));
   dependencies.push_back(make_pair(3, 2));
   dependencies.push_back(make_pair(5, 3));
   dependencies.push_back(make_pair(4, 5));
   if (canFinish(Tasks, dependencies)) {
      cout << "True";
   }
   else {
      cout << "False";
   }
   return 0;
}

आउटपुट

True

  1. C++ प्रोग्राम यह जांचने के लिए कि दिए गए ग्राफ में हैमिल्टनियन साइकिल या पथ मौजूद है या नहीं

    एक हैमिल्टनियन चक्र एक हैमिल्टनियन पथ है जैसे कि अंतिम शीर्ष से हैमिल्टनियन पथ के पहले शीर्ष तक एक किनारा (ग्राफ में) होता है। यह एक अप्रत्यक्ष ग्राफ़ में एक पथ है जो ग्राफ़ के प्रत्येक शीर्ष पर ठीक एक बार जाता है। कार्य और उद्देश्य: Begin    1.function isSafe() is used to check for whethe

  1. C++ प्रोग्राम यह जांचने के लिए कि कोई नंबर प्राइम है या नहीं

    एक अभाज्य संख्या एक पूर्ण संख्या होती है जो एक से बड़ी होती है और एक अभाज्य संख्या का एकमात्र गुणनखंड एक और स्वयं होना चाहिए। कुछ पहली अभाज्य संख्याएँ हैं - 2, 3, 5, 7, 11, 13 ,17 कोई संख्या अभाज्य है या नहीं यह जाँचने का कार्यक्रम इस प्रकार है। उदाहरण #include <iostream> using namespace std;

  1. C++ में दी गई निर्भरता से कार्यों का क्रम ज्ञात करें

    मान लीजिए कि हमारे पास अलग-अलग कार्य हैं; इन कार्यों को 0 से n-1 तक लेबल किया गया है। कुछ कार्यों में पूर्वापेक्षाएँ कार्य हो सकते हैं, इसलिए एक उदाहरण के रूप में यदि हम कार्य 2 चुनना चाहते हैं तो हमें पहले कार्य 1 को समाप्त करना होगा, जिसे एक जोड़ी के रूप में दर्शाया गया है - [2, 1] यदि हमारे पास क