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

जांचें कि दिया गया ग्राफ पेड़ है या नहीं


इस समस्या में, एक अप्रत्यक्ष ग्राफ दिया गया है, हमें यह जांचना है कि ग्राफ पेड़ है या नहीं। हम इसे केवल एक पेड़ के मानदंड की जाँच करके पा सकते हैं। एक पेड़ में एक चक्र नहीं होगा, इसलिए यदि ग्राफ में कोई चक्र है, तो वह पेड़ नहीं है।

जांचें कि दिया गया ग्राफ पेड़ है या नहीं

हम इसे दूसरे दृष्टिकोण का उपयोग करके देख सकते हैं, यदि ग्राफ जुड़ा हुआ है और इसमें V-1 किनारे हैं, तो यह एक पेड़ हो सकता है। यहाँ V ग्राफ में शीर्षों की संख्या है।

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

Input:
The adjacency matrix.
0 0 0 0 1
0 0 0 0 1
0 0 0 0 1
0 0 0 0 1
1 1 1 1 0

Output:
The Graph is a tree

एल्गोरिदम

isCycle(u, विज़िट किया गया, पैरेंट)

इनपुट: प्रारंभ शीर्ष u, विज़िट की गई सूची जिसे विज़िट किया गया है या नहीं, मूल शीर्ष को चिह्नित करने के लिए।

आउटपुट: सही है अगर ग्राफ़ में कोई चक्र है।

Begin
   mark u as visited
   for all vertex v which are adjacent with u, do
      if v is visited, then
         if isCycle(v, visited, u) = true, then
            return true
         else if v ≠ parent, then
            return true
   done
   return false
End

isTree(ग्राफ)

इनपुट: अप्रत्यक्ष ग्राफ।

आउटपुट: सही है जब ग्राफ़ एक पेड़ है।

Begin
   define a visited array to mark which node is visited or not
   initially mark all node as unvisited
   if isCycle(0, visited, φ) is true, then //the parent of starting vertex is null
      return false
   if the graph is not connected, then
      return false
   return true otherwise
End

उदाहरण

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

int graph[NODE][NODE] = {
   {0, 1, 1, 1, 0},
   {1, 0, 1, 0, 0},
   {1, 1, 0, 0, 0},
   {1, 0, 0, 0, 1},
   {0, 0, 0, 1, 0}
};
                                                               
bool isCycle(int u, bool visited[], int parent) {
   visited[u] = true;    //mark v as visited
   for(int v = 0; v<NODE; v++) {
      if(graph[u][v]) {
         if(!visited[v]) {     //when the adjacent node v is not visited
            if(isCycle(v, visited, u)) {
               return true;
            }
         } else if(v != parent) {    //when adjacent vertex is visited but not parent
            return true;    //there is a cycle
         }
      }
   }
   return false;
}

bool isTree() {
   bool *vis = new bool[NODE];

   for(int i = 0; i<NODE; i++)
      vis[i] = false;    //initialize as no node is visited
         
   if(isCycle(0, vis, -1))    //check if there is a cycle or not
      return false;
         
   for(int i = 0; i<NODE; i++) {
      if(!vis[i])    //if there is a node, not visited by traversal, graph is not connected
         return false;
   }
   return true;
}

int main() {
   if(isTree())
      cout << "The Graph is a Tree.";
   else
      cout << "The Graph is not a Tree.";
}

आउटपुट

The Graph is a Tree.

  1. जाँच करें कि क्या दिए गए वर्टिस की डिग्री पायथन में एक ग्राफ या ट्री का प्रतिनिधित्व करती है

    मान लीजिए कि हमारे पास कुछ शीर्षों की घातों की सूची है। हमें यह जांचना होगा कि यह ग्राफ बना रहा है या पेड़। इसलिए, यदि इनपुट deg =[2,2,3,1,1,1] जैसा है, तो आउटपुट ट्री होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - लंबवत:=शीर्षों की संख्या deg_sum :=सभी शीर्षों के सभी डिग्री मानों का योग

  1. पायथन में दिया गया पेड़ सममित पेड़ है या नहीं, यह जांचने के लिए कार्यक्रम

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें यह जांचना है कि वृक्ष सममित वृक्ष है या नहीं। एक पेड़ को सममित कहा जाएगा यदि वह समान है जब हम उसका दर्पण प्रतिबिम्ब लेते हैं। इन दो पेड़ों से, पहला सममित है, लेकिन दूसरा नहीं है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे। हम निम्नलिखित चरणों क

  1. पायथन में दिया गया ग्राफ द्विदलीय है या नहीं, यह जांचने के लिए कार्यक्रम

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष ग्राफ है, हमें यह जांचना है कि ग्राफ द्विदलीय है या नहीं। जैसा कि हम जानते हैं कि एक ग्राफ द्विदलीय होता है जब हम ग्राफ के नोड्स को दो सेट ए और बी में विभाजित कर सकते हैं जैसे कि ग्राफ के प्रत्येक किनारे {यू, वी} में ए में एक नोड और बी में दूसरा नोड वी होता है।