কম্পিউটার

একটি গ্রাফে দুটি নোডের মধ্যে পথ খোঁজার জন্য C++ প্রোগ্রাম


এই প্রোগ্রামে আমরা প্রদত্ত গ্রাফে DFS ব্যবহার করে দুটি নোডের মধ্যে পাথ বিদ্যমান কিনা তা জানতে পারি।

অ্যালগরিদম

Begin ফাংশন isReach() একটি পুনরাবৃত্ত ফাংশন যা s-এর কাছে d পৌঁছানো যায় কিনা তা পরীক্ষা করার জন্য :A) সমস্ত শীর্ষবিন্দুকে অনাভিদর্শিত হিসাবে চিহ্নিত করুন। খ) বর্তমান নোডটিকে পরিদর্শন করা হিসাবে চিহ্নিত করুন এবং এটিকে সারিবদ্ধ করুন এবং এটি একটি শীর্ষবিন্দুর সমস্ত সংলগ্ন শীর্ষবিন্দু পেতে ব্যবহার করা হবে C) সারি থেকে একটি শীর্ষবিন্দু ডিক্যু করুন এবং এটি মুদ্রণ করুন D) সারিবদ্ধ শীর্ষবিন্দুর সমস্ত সংলগ্ন শীর্ষবিন্দু পান s E) যদি একটি সন্নিহিত শীর্ষবিন্দু পরিদর্শন করা হয়নি, তারপর এটি পরিদর্শন করা হয়েছে বলে চিহ্নিত করুন এবং এটিকে সারিবদ্ধ করুন 

উদাহরণ

#include #include  namespace ব্যবহার করে std;class G {int n; তালিকা *adj; পাবলিক:// ফাংশনের ঘোষণা G(int n); void addEd(int v, int u); bool isReach(int s, int d);};G::G(int n) { this->n =n; adj =নতুন তালিকা [n];}অকার্যকর G::addEd(int v, int u) //গ্রাফে প্রান্ত যোগ করুন { adj[v].push_back(u);}bool G::isReach(int s, int d) { যদি (s ==d) true রিটার্ন করে; //অভিদর্শিত হিসাবে সমস্ত শীর্ষবিন্দু চিহ্নিত করুন। bool *visited =নতুন bool[n]; জন্য (int i =0; i  সারি; //বর্তমান নোডটিকে পরিদর্শন করা হিসাবে চিহ্নিত করুন এবং এটিকে সারিবদ্ধ করুন এবং এটি একটি শীর্ষবিন্দুর সমস্ত সংলগ্ন শীর্ষবিন্দু পেতে ব্যবহার করা হবে [গুলি] =সত্য; queue.push_back(গুলি); তালিকা::iterator i; যখন (!queue.empty()) { s =queue.front(); queue.pop_front(); //সারি থেকে একটি শীর্ষবিন্দু ডিক্যু করুন এবং এটি মুদ্রণ করুন //যদি একটি সংলগ্ন স্থান পরিদর্শন করা না হয়ে থাকে তবে এটিকে পরিদর্শন করা হয়েছে বলে চিহ্নিত করুন এবং এটি (i =adj[s].begin(); i !=adj[s].end( এর জন্য সারিবদ্ধ করুন ); ++i) { যদি (*i ==d) সত্য ফেরত দেয়; // যদি এই সংলগ্ন নোডটি গন্তব্য নোড হয়, তাহলে সত্যে ফিরে যান অন্যথায় BFS-এ চালিয়ে যান যদি (!visited[*i]) { visited[*i] =true; queue.push_back(*i); } } } রিটার্ন মিথ্যা;} int main() { G g(4); g.addEd(1, 3); g.addEd(0, 1); g.addEd(2, 3); g.addEd(1, 0); g.addEd(2, 1); g.addEd(3, 1); cout <<"উৎস এবং গন্তব্য শীর্ষবিন্দু লিখুন:(0-3)"; int a, b; cin>> a>> b; যদি (g.isReach(a, b)) cout <<"\n" < 

আউটপুট

উৎস এবং গন্তব্য শীর্ষবিন্দু লিখুন:(0-3) 3 থেকে 1 পর্যন্ত একটি পথ আছে 1 থেকে 3 পর্যন্ত একটি পথ রয়েছে

  1. C++ প্রোগ্রামে একটি বাইনারি ট্রির দুটি নোডের মধ্যে দূরত্ব খুঁজুন

  2. C++ এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যবর্তী পথের XOR

  3. C++ এ একটি বাইনারি ট্রির দুটি নোডের মধ্যে দূরত্ব খুঁজুন

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের মধ্যে প্রিন্ট পাথ।