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

C प्रोग्राम में पीटरसन ग्राफ समस्या?


मान लीजिए हमारे पास नीचे जैसा एक ग्राफ है। वह ग्राफ पीटरसन ग्राफ है। वर्टेक्स 0 से 9 तक नंबर दिए गए हैं। प्रत्येक वर्टेक्स के कुछ अक्षर हैं। मान लीजिए उस ग्राफ में एक वॉक W है, जहां L वर्टेक्स उपयोग किए जाते हैं। L अक्षरों वाला एक स्ट्रिंग S, वॉक W द्वारा तब साकार होता है जब W और S में अक्षर अनुक्रम समान हो। हम वर्टेक्स को कई बार विजिट कर सकते हैं।

C प्रोग्राम में पीटरसन ग्राफ समस्या?

उदाहरण के लिए, एक स्ट्रिंग S "ABBECCD" जैसी है, यह वॉक (0, 1, 6, 9, 7, 2, 3) द्वारा साकार होता है। हमारा कार्य ऐसा वॉक ढूंढना है, और यदि वह वॉक मौजूद है, तो लेक्सिकोग्राफिकली सबसे छोटा ऐसा वॉक ढूंढना है। यदि ऐसा कोई वॉक नहीं है, तो -1 लौटाएं।

एल्गोरिदम

petersonGraphWalk(S, v) -

begin
    res := starting vertex
    for each character c in S except the first one, do
        if there is an edge between v and c in outer graph, then
            v := c
        else if there is an edge between v and c+5 in inner graph, then
            v := c + 5
        else
            return false
        end if
        put v into res
    done
    return true
end

उदाहरण

#include<iostream>
using namespace std;
bool adj_mat[10][10] = {{0, 1, 0, 0, 1, 1, 0, 0, 0, 0},
    {1, 0, 1, 0, 0, 0, 1, 0, 0, 0},
    {0, 1, 0, 1, 0, 0, 0, 1, 0, 0},
    {0, 0, 1, 0, 1, 0, 0, 0, 1, 0},
    {1, 0, 0, 1, 0, 0, 0, 0, 0, 1},
    {1, 0, 0, 0, 0, 0, 0, 1, 1, 0},
    {0, 1, 0, 0, 0, 0, 0, 0, 1, 1},
    {0, 0, 1, 0, 0, 1, 0, 0, 0, 1},
    {0, 0, 0, 1, 0, 1, 1, 0, 0, 0},
    {0, 0, 0, 0, 1, 0, 1, 1, 0, 0} };
char S[100005];
char res[100005];
bool petersonGraphWalk(char* S, int v){
    res[0] = v + '0';
    for(int i = 1; S[i]; i++){
        // बाहरी ग्राफ को पार करें
        if(adj_mat[v][S[i] - 'A'] || adj_mat[S[i] - 'A'][v]){
            v = S[i] - 'A';
        }
        // फिर आंतरिक ग्राफ जांचें
        else if(adj_mat[v][S[i] - 'A' + 5] || adj_mat[S[i] - 'A' + 5][v]){
            v = S[i] - 'A' + 5;
        }else{
            return false;
        }
        res[i] = v + '0';
    }
    return true;
}
main() {
    char* str = "ABBECCD";
    if(petersonGraphWalk(str, str[0] - 'A') || petersonGraphWalk(str, str[0] - 'A' + 5)){
        cout << res;
    }else{
        cout << -1;
    }
}

आउटपुट

0169723

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

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

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

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

  1. पायथन प्रोग्राम: 0-1 नैपसैक समस्या पायथन प्रोग्राम: 0-1 नैपसैक समस्या

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें n वस्तुओं के वजन और मूल्य दिए गए हैं, हमें इन वस्तुओं को क्षमता W के बैग में अधिकतम क्षमता w तक रखना है। हमें अधिकतम वस्तुओं को ले जाने की आवश्यकता है और उसका मूल्य वापस करना है। उदाहरण (साधारण दृष्टिकोण) W): return k