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

हैमिल्टनियन चक्र


पहले शीर्ष पर।

इस समस्या में, हम यह निर्धारित करने का प्रयास करेंगे कि ग्राफ में हैमिल्टनियन चक्र है या नहीं। और जब एक हैमिल्टनियन चक्र मौजूद हो, तो चक्र को भी प्रिंट करें।

इनपुट और आउटपुट

Input:
The adjacency matrix of a graph G(V, E).
हैमिल्टनियन चक्र 
Output:
The algorithm finds the Hamiltonian path of the given graph. For this case it is (0, 1, 2, 4, 3, 0). This graph has some other Hamiltonian paths.
If one graph has no Hamiltonian path, the algorithm should return false.

एल्गोरिदम

isValid(v, k)

इनपुट - वर्टेक्स वी और पोजीशन के.

आउटपुट - जाँचता है कि v को k स्थिति में रखना मान्य है या नहीं।

Begin
   if there is no edge between node(k-1) to v, then
      return false
   if v is already taken, then
      return false
   return true; //otherwise it is valid
End

साइकिलफाउंड(नोड के)

इनपुट - ग्राफ़ का नोड.

आउटपुट - सही है जब एक हैमिल्टनियन चक्र होता है, अन्यथा गलत।

Begin
   if all nodes are included, then
      if there is an edge between nodes k and 0, then
         return true
      else
         return false;

   for all vertex v except starting point, do
      if isValid(v, k), then //when v is a valid edge
         add v into the path
         if cycleFound(k+1) is true, then
            return true
         otherwise remove v from the path
   done
   return false
End

उदाहरण

#include<iostream>
#define NODE 5
using namespace std;

int graph[NODE][NODE] = {
   {0, 1, 0, 1, 0},
   {1, 0, 1, 1, 1},
   {0, 1, 0, 0, 1},
   {1, 1, 0, 0, 1},
   {0, 1, 1, 1, 0},
};
   
/* int graph[NODE][NODE] = {
   {0, 1, 0, 1, 0},
   {1, 0, 1, 1, 1},
   {0, 1, 0, 0, 1},
   {1, 1, 0, 0, 0},
   {0, 1, 1, 0, 0},
}; */

int path[NODE];

void displayCycle() {
   cout<<"Cycle: ";

   for (int i = 0; i < NODE; i++)
      cout << path[i] << " ";
   cout << path[0] << endl;      //print the first vertex again
}

bool isValid(int v, int k) {
   if (graph [path[k-1]][v] == 0)   //if there is no edge
      return false;

   for (int i = 0; i < k; i++)   //if vertex is already taken, skip that
      if (path[i] == v)
         return false;
   return true;
}

bool cycleFound(int k) {
   if (k == NODE) {             //when all vertices are in the path
      if (graph[path[k-1]][ path[0] ] == 1 )
         return true;
      else
         return false;
   }

   for (int v = 1; v < NODE; v++) {       //for all vertices except starting point
      if (isValid(v,k)) {                //if possible to add v in the path
         path[k] = v;
         if (cycleFound (k+1) == true)
            return true;
         path[k] = -1;               //when k vertex will not in the solution
      }
   }
   return false;
}

bool hamiltonianCycle() {
   for (int i = 0; i < NODE; i++)
      path[i] = -1;
   path[0] = 0; //first vertex as 0

   if ( cycleFound(1) == false ) {
      cout << "Solution does not exist"<<endl;
      return false;
   }

   displayCycle();
   return true;
}

int main() {
   hamiltonianCycle();
}

आउटपुट

Cycle: 0 1 2 4 3 0

  1. पायथन में कम से कम चक्र लंबाई होल्डिंग लक्ष्य खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित ग्राफ की आसन्नता सूची है, जहां सूचकांक i पर प्रत्येक सूची नोड i से जुड़े नोड्स का प्रतिनिधित्व करती है। हमारे पास एक लक्ष्य मूल्य भी है। हमें लक्ष्य वाले सबसे छोटे चक्र की लंबाई ज्ञात करनी है। अगर कोई समाधान नहीं है तो वापसी -1. तो, अगर इनपुट पसंद है 0 है, लेक

  1. एक निर्देशित ग्राफ में चक्र का पता लगाने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक निर्देशित ग्राफ दिया गया है, हमें यह जांचना होगा कि ग्राफ में एक चक्र है या नहीं। आउटपुट सही होना चाहिए यदि दिए गए ग्राफ़ में कम से कम एक चक्र है, अन्यथा गलत है। आइए अब नीचे दिए गए कार्यान्वयन में समाधान देखे

  1. साइकिल छँटाई के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सरणी दी गई है, हमें इसे चक्र प्रकार की अवधारणा का उपयोग करके क्रमबद्ध करने की आवश्यकता है। यह एक इन-प्लेस एल्गोरिथम है और चक्रों के निर्माण से अदला-बदली होती है। आइए अब नीचे दिए गए कार्यान्वयन में समाधान दे