C++ میں ڈیپتھ فرسٹ سرچ (DFS) کو کیسے نافذ کریں۔

C My Ypt Frs Srch Dfs Kw Kys Nafdh Kry



ڈیپتھ فرسٹ سرچ (DFS) اعداد و شمار کے ڈھانچے میں گراف یا درخت کے تمام نوڈس کو تلاش کرنے کے لیے استعمال ہونے والا ایک طاقتور تکراری الگورتھم ہے۔ یہ ایک مخصوص ورٹیکس کو منتخب کرکے اپنی تلاش شروع کرتا ہے اور پھر بیک ٹریک کرنے سے پہلے ہر شاخ کے ساتھ جہاں تک ممکن ہو گراف کو تلاش کرنا شروع کرتا ہے۔ بیک ٹریکنگ اس وقت ہوتی ہے جب بھی ڈی ایف ایس الگورتھم ایک ایسے نوڈ تک پہنچتا ہے جس کا دورہ کرنے کے لیے کوئی پڑوسی نہیں ہوتا ہے۔ جب یہ کسی ایسے نوڈ تک پہنچتا ہے جس میں کوئی پڑوسی نہیں ہوتا ہے، تو یہ اپنے قدموں کو پچھلے نوڈ پر واپس لے جائے گا۔

میں ڈی ایف ایس ، جس نوڈس کی کھوج کی جا رہی ہے وہ اسٹیک ڈیٹا ڈھانچے میں محفوظ ہیں۔ وہ کنارے جو ہمیں غیر دریافت شدہ نوڈس کی طرف لے جاتے ہیں 'کہلاتے ہیں' دریافت کناروں 'جب کہ کناروں کو جو پہلے سے دیکھے گئے نوڈس کی طرف لے جائیں گے' کہلاتے ہیں۔ بلاک کناروں ' ڈی ایف ایس ایسے حالات میں مفید ہے جب ایک پروگرامر گراف میں منسلک اجزاء یا سائیکل تلاش کرنا چاہتا ہے۔

لاگو کرنے کے لیے اس مضمون کی ہدایات پر عمل کریں۔ ڈی ایف ایس C++ میں۔







C++ میں DFS کا نفاذ

اگلے حصے میں، ہم اس پر جائیں گے کہ کیسے ڈی ایف ایس C++ میں لاگو کیا جاتا ہے۔ کوئی عمل درآمد کرنے کے لیے دیے گئے اقدامات پر عمل کر سکتا ہے۔ ڈی ایف ایس .



  1. اسٹیک میں درخت یا گراف کا جڑ نوڈ داخل کریں۔
  2. اسٹیک کی ٹاپ آئٹم کو اپنی ملاحظہ کی گئی فہرست میں شامل کریں۔
  3. ملاحظہ کیے گئے نوڈ سے ملحقہ نوڈس کو دریافت کریں اور ان نوڈس کو شامل کریں جو ابھی تک اسٹیک پر نہیں گئے ہیں۔
  4. مرحلہ 2 اور 3 کو دہرائیں جب تک کہ اسٹیک خالی نہ ہو۔

ڈی ایف ایس سیڈوکوڈ

دی ڈی ایف ایس pseudocode ذیل میں دکھایا گیا ہے. میں گرمی() فنکشن، ہم اپنے پر عمل کرتے ہیں۔ ڈی ایف ایس ہر نوڈ پر فنکشن۔ کیونکہ گراف میں دو منقطع حصے ہو سکتے ہیں، ہم اسے چلا سکتے ہیں۔ ڈی ایف ایس ہر نوڈ پر الگورتھم اس بات کو یقینی بنانے کے لیے کہ ہم نے ہر چوٹی کا احاطہ کیا ہے۔



ڈی ایف ایس ( g a )
a دورہ کیا = سچ
کے لیے ہر b ∈ g Adj [ a ]
اگر ب دورہ کیا == جھوٹا
ڈی ایف ایس ( جی، بی )
گرمی ( )
{
ہر ایک ∈ جی کے لیے
a دورہ کیا = جھوٹا
ہر ایک ∈ جی کے لیے
ڈی ایف ایس ( جی، اے )
}

یہاں g، a اور b گراف کی نمائندگی کرتے ہیں، پہلے وزٹ شدہ نوڈ اور نوڈ اسٹیک میں بالترتیب۔





C++ میں DFS کا نفاذ

کے لیے ایک C++ پروگرام ڈی ایف ایس عمل درآمد ذیل میں دیا گیا ہے:



# شامل کریں
#include
# شامل کریں< فہرست>
استعمال کرتے ہوئے نام کی جگہ std ;
سانچے < قسم کا نام t >
کلاس DepthFirstSearch
{
نجی :
نقشہ < t، فہرست < t > > adjList ;
عوام :
DepthFirstSearch ( ) { }
باطل Add_edge ( ٹی اے، ٹی بی، bool تم = سچ )
{
adjList [ a ] . پیچھے دھکیلا ( ب ) ;
اگر ( تم )
{
adjList [ ب ] . پیچھے دھکیلا ( a ) ;
}
}
باطل پرنٹ کریں ( )
{
کے لیے ( آٹو میں : adjList ) {
cout << میں. پہلا << '->' ;
کے لیے ( t اندراج : میں. دوسرا ) {
cout << اندراج << ;
}
cout << endl ;
}
}
باطل dfs_helper ( ٹی نوڈ، نقشہ < bool > اور دورہ کیا ) {
دورہ کیا [ نوڈ ] = سچ ;
cout << نوڈ << ' << endl ;
کے لیے ( t پڑوسی : adjList [ نوڈ ] ) {
اگر ( ! دورہ کیا [ پڑوسی ] ) {
dfs_helper ( پڑوسی، دورہ کیا ) ;
}
}
}
باطل ڈی ایف ایس ( t src )
{
نقشہ < bool > دورہ کیا ;
dfs_helper ( src، کا دورہ کیا ) ;
}
} ;
int مرکزی ( ) {
DepthFirstSearch < int > جی ;
جی Add_edge ( 0 , 5 ) ;
جی Add_edge ( 0 , 7 ) ;
جی Add_edge ( 4 , 7 ) ;
جی Add_edge ( 7 , 8 ) ;
جی Add_edge ( 2 , 1 ) ;
جی Add_edge ( 0 , 6 ) ;
جی Add_edge ( 2 , 4 ) ;
جی Add_edge ( 3 , 2 ) ;
جی Add_edge ( 3 , 6 ) ;
جی Add_edge ( 7 , 5 ) ;
جی Add_edge ( 5 , 8 ) ;
جی پرنٹ کریں ( ) ;
جی ڈی ایف ایس ( 6 ) ;
cout << endl ;
}

اس کوڈ میں، ہم نے لاگو کیا ہے ڈی ایف ایس اوپر دیے گئے سیوڈو کوڈ کے بعد الگورتھم۔ ہمارے پاس نوڈس کے 12 جوڑے ہیں۔ ہم نے ایک کلاس کی تعریف کی' جی ' جو ایک گراف کی نمائندگی کرتا ہے جس کے عمودی a اور b ہوتے ہیں جو ملاحظہ شدہ اور غیر دیکھے ہوئے نوڈس کی نمائندگی کرتے ہیں۔

آؤٹ پٹ

نتیجہ

ڈی ایف ایس یہ ایک مقبول سرچ الگورتھم ہے جو کئی منظرناموں کے لیے مفید ہے، جیسے گراف میں سائیکل تلاش کرنا، اور منسلک اجزاء یا گراف میں تمام عمودی حصوں کے بارے میں معلومات حاصل کرنا۔ ہم نے کے کام کو بھی بیان کیا۔ ڈی ایف ایس ایک مثال کے ساتھ طریقہ. ڈی ایف ایس تکنیک کو عملی جامہ پہنانے کے لیے ڈھیر لگاتا ہے اور اسے درختوں پر بھی استعمال کیا جا سکتا ہے۔