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

C++ प्रोग्राम यह जांचने के लिए कि किसी दिए गए ग्राफ़ में हैमिल्टनियन चक्र होना चाहिए या नहीं

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

कार्य और उद्देश्य

Begin
   1. function isSafe() is used to check for whether it is
   adjacent to the previously added vertex and already not added.
   2. function hamiltonianCycle() solves the hamiltonian problem.
   3. function hamCycle() uses hamiltonianCycle() to solve the hamiltonian problem. It returns false if there is no
   Hamiltonian Cycle possible, otherwise return true and
   prints the path.
End

उदाहरण

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define N 5
using namespace std;
void displaytheSolution(int path[]);
bool isSafe(int n, bool g[N][N], int path[], int pos)
{
   if (g [path[pos-1]][n] == 0)
      return false;
   for (int i = 0; i < pos; i++)
      if (path[i] == n)
   return false;
   return true;
}
bool hamiltonianCycle(bool g[N][N], int path[], int pos)
{
   //If all vertices are included in Hamiltonian Cycle
   if (pos == N)
   {
      if (g[ path[pos-1] ][ path[0] ] == 1)
         return true;
      else
         return false;
   }
   for (int n = 1; n < N; n++)
   {
      if (isSafe(n, g, path, pos)) //Check if this vertex can be added to Hamiltonian Cycle
      {
         path[pos] = n;
         //recur to construct rest of the path
         if (hamiltonianCycle (g, path, pos+1) == true)
            return true;
         path[pos] = -1; //remove vertex if it doesn’t lead to the solution
      }
   }
   return false;
}
bool hamCycle(bool g[N][N])
{
   int *path = new int[N];
   for (int i = 0; i < N; i++)
      path[i] = -1;
   //put vertex 0 as the first vertex in the path. If there is a Hamiltonian Cycle, then the path can be started from any point
   //of the cycle as the graph is undirected
   path[0] = 0;
   if (hamiltonianCycle(g, path, 1) == false)
   {
      cout<<"\nCycle does not exist"<<endl;
      return false;
   }
   displaytheSolution(path);
   return true;
}
void displaytheSolution(int p[])
{
   cout<<"Cycle Exists:";
   cout<<" Following is one Hamiltonian Cycle \n"<<endl;
   for (int i = 0; i < N; i++)
      cout<<p[i]<<" ";
   cout<< p[0]<<endl;
}
int main()
{
   bool g[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(g);
   return 0;
}

आउटपुट

Cycle Exists: Following is one Hamiltonian Cycle
0 4 1 2 3 0

  1. C++ प्रोग्राम यह जांचने के लिए कि क्या एक अप्रत्यक्ष ग्राफ में एक यूलेरियन चक्र है

    यूलर सर्किट के बारे में जानने के लिए, हमारे पास यूलर पथ के बारे में विचार है। यूलर पथ एक पथ है; जिससे हम हर नोड पर ठीक एक बार विजिट कर सकते हैं। हम एक ही किनारों को कई बार इस्तेमाल कर सकते हैं। यूलर सर्किट एक विशेष प्रकार का यूलर पथ है। जब यूलर पथ का प्रारंभिक शीर्ष भी उस पथ के अंतिम शीर्ष से जुड़ा

  1. C++ प्रोग्राम यह जांचने के लिए कि क्या एक निर्देशित ग्राफ़ में एक यूलेरियन चक्र है

    यूलर चक्र/सर्किट एक पथ है; जिससे हम हर किनारे पर ठीक एक बार जा सकते हैं। हम एक ही कोने को कई बार इस्तेमाल कर सकते हैं। यूलर सर्किट एक विशेष प्रकार का यूलर पथ है। जब यूलर पथ का आरंभिक शीर्ष भी उस पथ के अंतिम शीर्ष से जुड़ जाता है, तो इसे यूलर परिपथ कहा जाता है। यह जाँचने के लिए कि कोई ग्राफ़ यूलेर

  1. C++ प्रोग्राम यह जांचने के लिए कि कोई ग्राफ़ मजबूती से जुड़ा है या नहीं

    निर्देशित ग्राफ़ में घटकों को दृढ़ता से जुड़ा हुआ कहा जाता है, जब एक घटक में प्रत्येक जोड़ी के बीच एक पथ होता है। इस एल्गोरिथम को हल करने के लिए, सबसे पहले, प्रत्येक शीर्ष का अंतिम समय प्राप्त करने के लिए DFS एल्गोरिथ्म का उपयोग किया जाता है, अब ट्रांसपोज़्ड ग्राफ़ का अंतिम समय ज्ञात करें, फिर शी