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

C++ में एक-दूसरे से पैसे उधार लेने वाले मित्रों के समूह के बीच नकदी प्रवाह को कम करें

मान लीजिए कुछ दोस्त हैं। उन्होंने एक-दूसरे से पैसे उधार लिए हैं। तो नेटवर्क पर कुछ नकदी प्रवाह होगा। हमारा काम नेटवर्क में नकदी प्रवाह को कम करना है। मान लीजिए कि तीन मित्र P1, P2 और P3 हैं। उनमें से नकदी प्रवाह नीचे जैसा है -

C++ में एक-दूसरे से पैसे उधार लेने वाले मित्रों के समूह के बीच नकदी प्रवाह को कम करें

यह नकदी प्रवाह न्यूनतम नहीं है; हमें इसे कम करना होगा। तब अंतिम आरेख इस प्रकार होगा -

C++ में एक-दूसरे से पैसे उधार लेने वाले मित्रों के समूह के बीच नकदी प्रवाह को कम करें

इस समस्या को हल करने के लिए हम लालची दृष्टिकोण का उपयोग करेंगे। यहां प्रत्येक चरण में एक व्यक्ति की सभी राशियों का निपटान करें और शेष n-1 व्यक्तियों के लिए पुनरावृत्ति करें। अब सवाल आता है कि पहले व्यक्ति को कैसे चुनें? उत्तर है, प्रत्येक व्यक्ति के लिए शुद्ध राशि की गणना करें जहां सभी ऋणों को सभी क्रेडिट से घटाकर शुद्ध राशि प्राप्त की जाती है। जब शुद्ध राशि का मूल्यांकन किया जाता है, तो दो नोड्स खोजें जो न्यूनतम और अधिकतम हों। ये दो व्यक्ति सबसे अधिक लेनदार और देनदार हैं। न्यूनतम मान वाला व्यक्ति पहला व्यक्ति होता है। एल्गोरिथ्म नीचे जैसा है -

  • प्रत्येक व्यक्ति पाई के लिए, 0 से n-1 तक, निम्न चरणों का पालन करें

  • प्रत्येक व्यक्ति के लिए शुद्ध राशि की गणना करें। एक व्यक्ति के लिए नेट माउंट I की गणना सभी ऋणों के योग को सभी क्रेडिट के योग से घटाकर की जा सकती है।

  • अधिकतम लेनदार पीसी और अधिकतम देनदार पीडी खोजें। मान लीजिए कि अधिकतम लेनदार को क्रेडिट की जाने वाली अधिकतम राशि max_credit है, और अधिकतम देनदार से डेबिट की गई अधिकतम राशि को max_debit कहा जाता है।

  • सेट x:=न्यूनतम अधिकतम_क्रेडिट और अधिकतम_डेबिट। फिर पीडी से x डेबिट करें, और x को पीसी में क्रेडिट करें

  • यदि x, max_credit के समान है, तो सेट से Pc हटा दें और अगले n-1 व्यक्तियों के लिए पुनरावृत्ति करें।

  • यदि x, max_debit के समान है, तो Pd को व्यक्तियों के एक समूह से हटा दें और अगले n-1 व्यक्तियों के लिए पुनरावृति करें

उदाहरण

#include<iostream>
#include<algorithm>
#define N 3
using namespace std;
int getMinIndex(int arr[]) {
   int minInd = 0;
   for (int i=1; i<N; i++)
      if (arr[i] < arr[minInd])
      minInd = i;
   return minInd;
}
int getMaxIndex(int arr[]) {
   int maxInd = 0;
   for (int i=1; i<N; i++)
      if (arr[i] > arr[maxInd])
      maxInd = i;
   return maxInd;
}
void cashFlowTask(int amount[]) {
   int max_credit = getMaxIndex(amount), max_debit = getMinIndex(amount);
   if (amount[max_credit] == 0 && amount[max_debit] == 0)
   return;
   int min_val = min(-amount[max_debit], amount[max_credit]);
   amount[max_credit] -= min_val;
   amount[max_debit] += min_val;
   cout << "P" << max_debit << " sends " << min_val << " to " << "P" << max_credit << endl;
   cashFlowTask(amount);
}
void minCashFlow(int graph[][N]) {
   int amount[N] = {0};
   for (int p=0; p<N; p++)
   for (int i=0; i<N; i++)
   amount[p] += (graph[i][p] - graph[p][i]);
   cashFlowTask(amount);
}
int main() {
   int graph[N][N] = {
   {0, 1000, 2000},
   {0, 0, 5000},
   {0, 0, 0},};
   minCashFlow(graph);
}

आउटपुट

P1 sends 4000 to P2
P0 sends 3000 to P2

  1. C++ में दिए गए इनऑर्डर ट्रैवर्सल से विशेष बाइनरी ट्री का निर्माण करें

    हमें एक सरणी arr[] दी गई है जिसमें बाइनरी ट्री का इनऑर्डर ट्रैवर्सल है। लक्ष्य उस सरणी से एक विशेष बाइनरी ट्री बनाना है। एक विशेष बाइनरी ट्री वह होता है जिसका रूट नोड का वजन उसके बाएं और दाएं दोनों बच्चों के वजन से अधिक होता है। उदाहरण के लिए इनपुट int arr[] = {10, 20, 28, 40, 32, 31, 30} आउटपुट

  1. सी ++ में दिए गए सेट में मौजूद प्रत्येक नोड से सभी पहुंच योग्य नोड्स खोजें

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष ग्राफ और शिखर का एक सेट है; हमें दिए गए सेट में मौजूद प्रत्येक शीर्ष से सभी पहुंच योग्य नोड्स को ढूंढना है। तो, अगर इनपुट पसंद है तब आउटपुट [1,2,3] और [4,5] होगा क्योंकि ये दो जुड़े हुए घटक हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - नोड्स :=ग्राफ

  1. किसी दिए गए स्रोत से गंतव्य तक सभी पथों को C++ में प्रिंट करें

    इस समस्या में हमें एक निर्देशित ग्राफ़ दिया जाता है और हमें स्रोत से ग्राफ़ के गंतव्य तक के सभी पथों को प्रिंट करना होता है। निर्देशित ग्राफ़ किनारों वाला एक ग्राफ़ है जो शीर्ष a से b तक निर्देशित होता है। समस्या को समझने के लिए एक उदाहरण लेते हैं स्रोत =के गंतव्य =पी आउटपुट: K -> T -&