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

कुछ शर्तों के साथ ग्राफ बनाने के लिए C++ प्रोग्राम


मान लीजिए हमारे पास दो संख्याएं N और K हैं। N तत्वों वाला एक निदेशित ग्राफ पर विचार करें। N शीर्ष निम्नलिखित शर्तों को पूरा करते हैं:

  • ग्राफ सरल और जुड़ा हुआ है
  • शीर्ष 1 से N तक गिने जाते हैं
  • मान लें M ग्राफ में किनारों की संख्या है। किनारों को 1 से M तक गिना जाता है। किनारे की लंबाई 1 है। और किनारा i शीर्ष U[i] को शीर्ष V[i] से जोड़ता है।
  • ठीक K शीर्ष युग्म (i, j) हैं जहां i < j, जैसे कि उनके बीच की सबसे छोटी दूरी 2 है।

यदि ऐसा ग्राफ मौजूद है, तो हमें उस ग्राफ का निर्माण करना है। अन्यथा -1 वापस करें।

उदाहरण के लिए, यदि इनपुट N = 5; K = 3 है, तो आउटपुट होगा:

कुछ शर्तों के साथ ग्राफ बनाने के लिए C++ प्रोग्राम

चरण

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

यदि k > (n - 1) * (n - 2) / 2, तो: -1 प्रिंट करें ((n - 1) * (n - 2) / 2 - k + n - 1) प्रिंट करें i := 1 से n-1 तक, करें: युग्म (1, i + 1) प्रिंट करें count := (n - 1) * (n - 2) / 2 - k i := 2 से n तक, करें: j := i + 1 से n तक, करें: यदि count <= 0, तो: वापस करें युग्म (i, j) प्रिंट करें count घटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; void solve(int n, int k){    if (k > (n - 1) * (n - 2) / 2){       cout << -1 << endl;    }    cout << (n - 1) * (n - 2) / 2 - k + n - 1 << '\n';    for (int i = 1; i < n; i++){       cout << 1 << ", " << i + 1 << '\n';    }    int count = (n - 1) * (n - 2) / 2 - k;    for (int i = 2; i <= n; i++){       for (int j = i + 1; j <= n; j++){          if (count <= 0){             return;          }          cout << i << ", " << j << '\n';          count--;       }    } } int main(){    int N = 5;    int K = 3;    solve(N, K); }

इनपुट

5, 3

आउटपुट

7 1, 2 1, 3 1, 4 1, 5 2, 3 2, 4 2, 5

  1. C++ प्रोग्राम: एडजेसेंसी लिस्ट का उपयोग करके ग्राफ प्रतिनिधित्व करना C++ प्रोग्राम: एडजेसेंसी लिस्ट का उपयोग करके ग्राफ प्रतिनिधित्व करना

    एक ग्राफ का एडजेसेंसी लिस्ट प्रतिनिधित्व एक लिंक्ड लिस्ट प्रतिनिधित्व है। इस प्रतिनिधित्व में हमारे पास लिस्ट्स का एक ऐरे होता है। ऐरे का आकार V होता है। यहां V वर्टेक्स की संख्या है। दूसरे शब्दों में, हम कह सकते हैं कि हमारे पास V संख्या की अलग-अलग लिस्ट्स को स्टोर करने के लिए एक ऐरे है। यदि एक लि

  1. C++ प्रोग्राम: इन्सिडेंस मैट्रिक्स का उपयोग करके ग्राफ प्रतिनिधित्व करना C++ प्रोग्राम: इन्सिडेंस मैट्रिक्स का उपयोग करके ग्राफ प्रतिनिधित्व करना

    एक ग्राफ का इन्सिडेंस मैट्रिक्स ग्राफ को मेमोरी में स्टोर करने का एक और प्रतिनिधित्व है। यह मैट्रिक्स एक वर्ग मैट्रिक्स नहीं है। इन्सिडेंस मैट्रिक्स का ऑर्डर V x E होता है। जहां V वर्टेक्स की संख्या है और E ग्राफ में एज की संख्या है। इस मैट्रिक्स की प्रत्येक पंक्ति में हम वर्टेक्स रखते हैं, और प्रत

  1. C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स का उपयोग करके ग्राफ प्रतिनिधित्व करना C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स का उपयोग करके ग्राफ प्रतिनिधित्व करना

    एक ग्राफ का एडजेसेंसी मैट्रिक्स V x V आकार का एक वर्ग मैट्रिक्स होता है। V ग्राफ G के वर्टेक्स की संख्या है। इस मैट्रिक्स में प्रत्येक तरफ V वर्टेक्स मार्क किए जाते हैं। यदि ग्राफ में i से j वर्टेक्स तक कुछ एज हैं, तो एडजेसेंसी मैट्रिक्स में i-वीं पंक्ति और j-वें कॉलम में 1 होगा (या वेटेड ग्राफ के