কম্পিউটার

অনির্দেশিত গ্রাফটিকে নির্দেশিত গ্রাফে রূপান্তর করুন যাতে C++ এ 1 এর বেশি দৈর্ঘ্যের কোনো পথ নেই


এই টিউটোরিয়ালে, আমরা অনির্দেশিত গ্রাফটিকে একটি নির্দেশিত গ্রাফে রূপান্তর করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব যাতে 1-এর বেশি দৈর্ঘ্যের কোনও পথ নেই৷

এর জন্য আমাদের একটি অনির্দেশিত গ্রাফ প্রদান করা হবে। আমাদের কাজ হল সেই গ্রাফটিকে সরাসরি একটিতে রূপান্তর করা, প্রদত্ত কোনো পথের দৈর্ঘ্য 1-এর বেশি নেই।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define N 100005
//storing the graph
vector<int> gr[N];
//storing colour of each vertex
int colour[N];
vector<pair<int, int> > edges;
bool bip;
//adding edges to the graph
void add_edge(int x, int y){
   gr[x].push_back(y);
   gr[y].push_back(x);
   edges.push_back(make_pair(x, y));
}
//checking if the given graph
//is bipartite
void dfs(int x, int col){
   colour[x] = col;
   //moving to the child vertices
   for (auto i : gr[x]) {
      if (colour[i] == -1)
         dfs(i, col ^ 1);
      //if child and parent having
      //same branch
      else if (colour[i] == col)
         bip = false;
   }
}
//converting into direct graph
void convert_directed(int n, int m){
   memset(colour, -1, sizeof colour);
   bip = true;
   //calling bipartite function
   dfs(1, 1);
   if (!bip) {
      cout << -1;
      return;
   }
   //if bipartite is possible
   for (int i = 0; i < m; i++) {
      if (colour[edges[i].first] == 0)
         swap(edges[i].first, edges[i].second);
      cout << edges[i].first << " " << edges[i].second << endl;
   }
}
int main(){
   int n = 4, m = 3;
   add_edge(1, 2);
   add_edge(1, 3);
   add_edge(1, 4);
   convert_directed(n, m);
   return 0;
}

আউটপুট

1 2
1 3
1 4

  1. C++ এ একটি অনির্দেশিত গ্রাফের সমস্ত সংযুক্ত উপাদানের ন্যূনতম উপাদানগুলির সমষ্টি

  2. C++ এর কোনো উৎস থেকে k-এর বেশি দৈর্ঘ্যের পথ আছে কিনা তা খুঁজুন

  3. C++ এ একটি অনির্দেশিত গ্রাফে সমস্ত চক্র প্রিন্ট করুন

  4. C++ এ প্রদত্ত প্রারম্ভিক অক্ষর থেকে দীর্ঘতম ধারাবাহিক পথের দৈর্ঘ্য খুঁজুন