> For the complete documentation index, see [llms.txt](https://phitron.gitbook.io/algorithm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://phitron.gitbook.io/algorithm/module_3/_-dfs.md).

# মডিউল ৩\_১ঃ DFS&#x20;

DFS এর পূর্ণরূপ হল Depth-First Search। এইটি গ্রাফের গভীরে গিয়ে নোড ট্রাভাস এবং সার্চ করতে পারে।&#x20;

নিচে DFS কিভাবে কাজ করতে সেইটি বিস্তারিত লিখা হলঃ

## গ্রাফের ইনপুট

**6 7**\
0 3\
0 1\
0 2\
1 5\
2 5\
2 4\
3 4

এইখানে গ্রাফের প্রথমে ইনপুট নেয়া N ( Number of nodes ) এবং E ( Number of edges )\
উপরের ইনপুটে N=6 এবং E=7 , এই এরপরই E বার ইনপুট নিয়া হয়েছে কোন নোড কোন নোডের সাথে connection আছে।&#x20;

\
নিচে ইনপুটটির edge গুলো অনুসারে গ্রাফটি আঁকা হল ।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FLjnwJW6IctMdBIKeC5UJ%2Fimage.png?alt=media&amp;token=10c31f47-583b-4fbc-9577-7fe52dc0ae30" alt="" width="253"><figcaption></figcaption></figure>

এই গ্রাফের ইনপুটকে অ্যাডজাসেন্সি লিস্ট এর মধ্যে রাখতে array of vector টি এইরকম হবে।<br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FiHOot4NpgsoTPI5TDBnE%2Fimage.png?alt=media&amp;token=43302887-4c70-4054-a66d-b7cf97a863f9" alt=""><figcaption></figcaption></figure>

বুঝার সুবিধাতে এইভাবে আঁকা হল। কোন নোডের সাথে কোন কোন নোড connected আছে।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F6u7FrOCeo6waNjiLRYa4%2Fimage.png?alt=media&amp;token=41314a56-32dd-4df0-a713-3a7097c9451f" alt="" width="168"><figcaption></figcaption></figure>

আমাদের dfs নামের একটি function বানানো থাকবে। dfs শুরু করার জন্য আমরা প্রথমে source পাঁঠিয়ে dfs কে কল করবো। ধরি উরের গ্রাফের source = 0 ।&#x20;

-> এখন source = 0 দিয়ে dfs(0) কল করাইপ্রথমেই আমরা সেই 0 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0** \
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F6MBXNBRBnn0js8uQqF8z%2Fimage.png?alt=media&amp;token=a408e425-a3ad-42e0-be1d-8c624ace8667" alt="" width="287"><figcaption></figcaption></figure>

এরপর 0 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  0 নোডের সাথে connected নোডগুলো হলঃ 1, 2, 3। তাহলে dfs(1) দিয়ে আবার function টি কল করবো।&#x20;

***

-> এখন source = 1 দিয়ে dfs(1) কল করাই  প্রথমেই আমরা সেই 1 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0 -> 1**\
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FBoyr6UONUMKzCayQdOci%2Fimage.png?alt=media&amp;token=953c562a-2b2a-4dce-a629-93d2a1d7f901" alt="" width="287"><figcaption></figcaption></figure>

এরপর 1 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  1 নোডের সাথে connected নোডগুলো হল 0, 5।  এখানে 0 নোড ইতিমধ্যে ভিজিটেড তাই সেইটি আর ভিজিট করা যাবে না। তাহলে dfs(5) দিয়ে আবার function টি কল করবো ।&#x20;

***

-> এখন source = 5 দিয়ে dfs(5) কল করাই  প্রথমেই আমরা সেই 5 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0 -> 1 -> 5**\
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FCX0KlZgjyMgOPRPioWEs%2Fimage.png?alt=media&amp;token=548ed890-c398-4950-a860-8361e2ab064d" alt="" width="287"><figcaption></figcaption></figure>

এরপর 5 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  5 নোডের সাথে connected নোডগুলো হলঃ  1, 2।  এখানে 1 নোড ইতিমধ্যে ভিজিটেড তাই সেইটি আর ভিজিট করা যাবে না। তাহলে dfs(2) দিয়ে আবার function টি কল করবো ।&#x20;

***

-> এখন source = 2 দিয়ে dfs(2) কল করাই  প্রথমেই আমরা সেই 2 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0 -> 1 -> 5 -> 2**\
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FmEtzJnPOHVtdCeIdiAcH%2Fimage.png?alt=media&amp;token=d8ec6bbf-88df-49eb-a8f9-089442e19626" alt="" width="287"><figcaption></figcaption></figure>

এরপর 2 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  2 নোডের সাথে connected নোডগুলো হলঃ 0, 5, 4।  এখানে 0 এবং 1 নোডগুলো ইতিমধ্যে ভিজিটেড তাই সেইগুলোতে আর ভিজিট করা যাবে না। তাহলে dfs(4) দিয়ে আবার function টি কল করবো ।&#x20;

***

-> এখন source = 4 দিয়ে dfs(4) কল করাই  প্রথমেই আমরা সেই 4 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0 -> 1 -> 5 -> 2 -> 4**\
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2Fsn5WDIQYR5e3vB3UZYDP%2Fimage.png?alt=media&amp;token=feab9f16-681f-498b-a868-95056901acfc" alt="" width="287"><figcaption></figcaption></figure>

এরপর 4 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  4 নোডের সাথে connected নোডগুলো হলঃ 2,3।  এখানে 2 নোড ইতিমধ্যে ভিজিটেড তাই সেইটি আর ভিজিট করা যাবে না। তাহলে dfs(3) দিয়ে আবার function টি কল করবো ।&#x20;

***

-> এখন source = 3 দিয়ে dfs(3) কল করাই  প্রথমেই আমরা সেই 3 নোডকে ভিজিট করে ফেলবো। \
**আমরা এখন পর্যন্ত ভিজিট করছেঃ 0 -> 1 -> 5 -> 2 -> 4 -> 3**\
নিচের চিত্রে ভিজিট করা নোড বুঝা জন্য ভিজিটেড নোডগুলোর কালার সবুজ করে দেয়া হলঃ

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FBJWbRPu0IsUY3yRUVpu1%2Fimage.png?alt=media&amp;token=79f28f9f-1e7f-47d7-9c95-4a52b0fab6f8" alt="" width="287"><figcaption></figcaption></figure>

এরপর 3 নোডের সাথে connected গুলোর আনভিজিটেড একটি নোডে যাবো ।  3 নোডের সাথে connected নোডগুলো হলঃ 0, 4।  এএখানে 0 এবং 4 নোডগুলো ইতিমধ্যে ভিজিটেড তাই সেইগুলোতে আর ভিজিট করা যাবে না। তাহলে আর  dfs function টি কল করবো নাহ।&#x20;

এইভাবে DFS ট্রাভাসালের মাধ্যমে সব নোডগুলোকে ভিজিট করেছি।&#x20;
