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

सभी नोड्स को हटाने के लिए अपेक्षित ऑपरेशनों की संख्या गिनने के लिए C++ प्रोग्राम


मान लीजिए हमारे पास एक निर्देशित ग्राफ G का आसन्नता मैट्रिक्स है। जब तक ग्राफ खाली नहीं हो जाता, हम निम्नलिखित ऑपरेशन को दोहराते हैं: G से एक शीर्ष चुनें, फिर उस शीर्ष और उन सभी शीर्षों को मिटा दें जो उस शीर्ष से कुछ किनारों का अनुसरण करके पहुंच योग्य हैं। एक शीर्ष को मिटाने से उससे जुड़े किनारे भी मिट जाएंगे। हमें ऑपरेशन किए जाने की अपेक्षित संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट जैसा है:

सभी नोड्स को हटाने के लिए अपेक्षित ऑपरेशनों की संख्या गिनने के लिए C++ प्रोग्राम

तो आउटपुट 1.6667 होगा, क्योंकि प्रारंभ में शीर्ष A चुनें, सभी शीर्ष हटाएं, यदि हम शीर्ष B चुनते हैं, तो B और C हटाएं, और दूसरे ऑपरेशन में A को चुनकर हटाएं, इसी तरह C को चुनने पर भी 2 ऑपरेशन लगते हैं। तो औसत (1+2+2)/3 = 1.6667 है।

चरण

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

n := G का आकार i := 0 से n-1 तक, करें: G[i, i] := 1 k := 0 से n-1 तक, करें: i := 0 से n-1 तक, करें: j := 0 से n-1 तक, करें: यदि G[i, k] शून्येतर है और G[k, j] शून्येतर है, तो: G[i, j] := 1 ans := 0 i := 0 से n-1 तक, करें: k := 0 j := 0 से n-1 तक, करें: यदि G[j, i] शून्येतर है, तो: k बढ़ाएं ans := ans + 1.0 / k ans वापस करें

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; double solve(vector<vector<int>> G){    int n = G.size();    for (int i = 0; i < n; ++i)       G[i][i] = 1;    for (int k = 0; k < n; ++k)       for (int i = 0; i < n; ++i)          for (int j = 0; j < n; ++j)             if (G[i][k] && G[k][j])                G[i][j] = 1;    double ans = 0;    for (int i = 0; i < n; ++i){       int k = 0;       for (int j = 0; j < n; ++j)          if (G[j][i])             ++k;          ans += 1.0 / k;    }    return ans; } int main(){    vector<vector<int>> G = { { 0, 1, 0 }, { 0, 0, 1 }, { 0, 1, 0 }};    cout << solve(G) << endl; }

इनपुट

{ { 0, 1, 0 }, { 0, 0, 1 }, { 0, 1, 0 } }

आउटपुट

1.66667

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

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

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

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

  1. C++ में डेसिमल से बाइनरी रूपांतरण C++ में डेसिमल से बाइनरी रूपांतरण

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