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

C++ प्रोग्राम अनवेटेड ग्राफ में हैमिल्टोनियन साइकिल खोजने के लिए


एक हैमिल्टोनियन साइकिल एक हैमिल्टोनियन पथ है जैसे कि हैमिल्टोनियन पथ के अंतिम वर्टेक्स से पहले वर्टेक्स तक एक एज (ग्राफ में) है। यह एक अनडायरेक्टेड ग्राफ में एक पथ है जो ग्राफ के प्रत्येक वर्टेक्स को ठीक एक बार विजिट करता है।

फंक्शन्स और उद्देश्य

  • isSafe(): जांचता है कि क्या वर्टेक्स पहले से जोड़े गए वर्टेक्स से एडजेसेंट है और पहले से नहीं जोड़ा गया है।
  • hamiltonianCycle(): हैमिल्टोनियन समस्या को हल करता है।
  • hamCycle(): hamiltonianCycle() का उपयोग करके समस्या हल करता है। यदि हैमिल्टोनियन साइकिल संभव नहीं है तो false लौटाता है, अन्यथा true लौटाता है और पथ प्रिंट करता है।

C++ कार्यान्वयन

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define N 5
using namespace std;

void displaySolution(int path[]);
bool isSafe(int v, bool graph[N][N], int path[], int pos) {
    if (graph[path[pos-1]][v] == 0) return false;
    for (int i = 0; i < pos; i++)
        if (path[i] == v) return false;
    return true;
}

bool hamiltonianCycleUtil(bool graph[N][N], int path[], int pos) {
    if (pos == N) {
        if (graph[path[pos-1]][path[0]] == 1) return true;
        else return false;
    }
    for (int v = 1; v < N; v++) {
        if (isSafe(v, graph, path, pos)) {
            path[pos] = v;
            if (hamiltonianCycleUtil(graph, path, pos+1)) return true;
            path[pos] = -1;
        }
    }
    return false;
}

bool hamCycle(bool graph[N][N]) {
    int *path = new int[N];
    for (int i = 0; i < N; i++) path[i] = -1;
    path[0] = 0;
    if (!hamiltonianCycleUtil(graph, path, 1)) {
        cout << "\nCycle does not exist" << endl;
        return false;
    }
    displaySolution(path);
    return true;
}

void displaySolution(int path[]) {
    cout << "Cycle Exists: Following is one Hamiltonian Cycle\n";
    for (int i = 0; i < N; i++) cout << path[i] << " ";
    cout << path[0] << endl;
}

int main() {
    bool graph[N][N] = {
        {0, 1, 0, 1, 1},
        {0, 0, 1, 1, 0},
        {0, 1, 0, 1, 1},
        {1, 1, 1, 0, 1},
        {0, 1, 1, 0, 0}
    };
    hamCycle(graph);
    return 0;
}

आउटपुट

Cycle Exists: Following is one Hamiltonian Cycle
0 4 1 2 3 0
  1. - C++ प्रोग्राम: कार्ड गेम के विजेता का पता लगाएं

    मान लीजिए हमारे पास एक संख्या n, आकार k1 और k2 की दो सरणी A और B हैं। अमल और बिमल एक दिलचस्प कार्ड गेम खेल रहे हैं। n कार्ड हैं, जिनकी संख्या 1 से n है। प्रारंभ में कार्ड उनके बीच वितरित किए जाते हैं। खेल इस प्रकार चलता है: प्रत्येक चरण में, प्रत्येक खिलाड़ी अपने कार्ड में से एक लेता है (जो भी वे चा

  1. - चतुर्भुज की चौथी भुजा ढूंढने के लिए C++ प्रोग्राम

    मान लीजिए हमारे पास तीन संख्याएं a, b और c हैं। हम एक मनमाना गैर-अपक्षयी सरल चतुर्भुज के आकार में एक बंद बाड़ बनाना चाहते हैं। हमारे पास पहले से ही a, b और c लंबाई की तीन भुजाएं हैं। हमें दूसरी भुजा d ढूंढनी है। उदाहरण के लिए, यदि इनपुट a = 12; b = 34; c = 56 है, तो आउटपुट 42 होगा, अन्य उत्तर भी संभ

  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है