> 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/dsu-cycle-detection-mst/_-dsu-cycle-detection-undirected.md).

# মডিউল ১১\_১ঃ DSU দিয়ে Cycle Detection Undirected গ্রাফে

এখন আমরা  DSU ব্যবহার করে undirected graph এ cycle detect করবো।&#x20;

প্রথমে প্রশ্ন আসে কেন শুধু undirect graph এর cycle detect করতে পারে DSU, কেন directed graph এর cycle detect করতে পারে না, এইটি জানার জন্য আগে আমাদের জানতে হবে undirect graph এ কিভাবে DSU cycle detect করে।&#x20;

## Undirect graph এর cycle detect DSU দিয়ে

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

**6 6**\ <mark style="color:blue;">0 1</mark>\ <mark style="color:blue;">0 4</mark>\ <mark style="color:blue;">0 2</mark>\ <mark style="color:blue;">2 3</mark>\ <mark style="color:blue;">2 5</mark>\ <mark style="color:blue;">5 3</mark>

DSU তে প্রথমে প্রতিটি নোডই নিজেই লিডার হিসেবে থাকে, আমরা এইখানে প্রতিটি edge এ পাওয়া প্রতিটি নোডকে union করে দিব।&#x20;

**শুরুতে গ্রাফ এবং গ্রুপগুলোর অবস্থা এইরকম হবেঃ**

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FPcPjdG74KtxzX0ygVA10%2Fimage.png?alt=media&amp;token=4b20174b-69ed-4262-b99f-6d548cda7b23" alt="" width="563"><figcaption></figcaption></figure>

***

**১ম edge:  0 এর লিডার 0 নিজে এবং 1 এর লিডার 1 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।** \
**১ম edge:  0 1 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FQKR4yqpe8KhiFrPeijzx%2Fimage.png?alt=media&amp;token=c3b3857b-42a2-4598-b22c-dba3b10e2a9b" alt="" width="563"><figcaption></figcaption></figure>

0 1 কে union করা পর, 0 এর লিডার  হচ্ছে 0 নিজেই এবং 1 এর লিডার হচ্ছে 0।&#x20;

***

**২য় edge:  0 এর লিডার 0 নিজে এবং 4 এর লিডার 4 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।** \
**২য়  edge:  0 4 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F8B4vZueZR6yTO2l13a9A%2Fimage.png?alt=media&amp;token=9850a2e0-233b-4977-97a3-c40fbde113b4" alt="" width="563"><figcaption></figcaption></figure>

0 4 কে union করা পর, 0 এর লিডার  হচ্ছে 0 নিজেই এবং 4  এর লিডার হচ্ছে 0।&#x20;

***

**৩য় edge:  0 এর লিডার 0 নিজে এবং 2 এর লিডার 2 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।** \
**৩য়  edge:  0 2 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FJURKGx3hzw75GT18kWRJ%2Fimage.png?alt=media&amp;token=9dbbbd88-e419-4e37-a360-54fd3cd8870c" alt="" width="563"><figcaption></figcaption></figure>

0 2 কে union করা পর, 0 এর লিডার  হচ্ছে 0 নিজেই এবং 2  এর লিডার হচ্ছে 0।&#x20;

***

**৪র্থ edge:  2 এর লিডার 0 এবং 3 এর লিডার 3 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।**\
**৪র্থ  edge:  2 3 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2Fcd0y9X1xvIlIkAXWF3re%2Fimage.png?alt=media&amp;token=4814de8a-cfdc-4d16-87d3-1f5023fbcfca" alt="" width="563"><figcaption></figcaption></figure>

2 3 কে union করা পর, 2 এর লিডার  হচ্ছে 0 নিজেই এবং 3  এর লিডার হচ্ছে 0।&#x20;

***

**৫ম edge:  2 এর লিডার 0 এবং 5 এর লিডার 5 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।**\
**৫ম  edge:  2 5 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FPoKqGTmcyRUw4bybs2Sr%2Fimage.png?alt=media&amp;token=870708e7-909e-4ff4-b63f-c6661658bc72" alt="" width="563"><figcaption></figcaption></figure>

2 5 কে union করা পর, 2 এর লিডার  হচ্ছে 0 নিজেই এবং 5  এর লিডার হচ্ছে 0।&#x20;

***

**৬ষ্ট edge:  5 এর লিডার 0 এবং 3 এর লিডার 0,  যেহেতু তাদের লিডারগুলো মিলে গিয়েছে তাই  cycle detect হয়েছে।**

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FLT4QApcVIMMk5wZ4Q9V7%2Fimage.png?alt=media&amp;token=6cf9480c-c784-4f59-9443-742ea4102498" alt="" width="563"><figcaption></figcaption></figure>

এইভাবে DSU ব্যবহার করে Undirected graph এর মধ্যে Cycle Detection করা যায়।&#x20;

***

## **কেন directed graph এর cycle detect করতে পারে না**

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

**3 3**\ <mark style="color:blue;">0 1</mark>\ <mark style="color:blue;">0 2</mark>\ <mark style="color:blue;">1 2</mark>

DSU তে প্রথমে প্রতিটি নোডই নিজেই লিডার হিসেবে থাকে, আমরা এইখানে প্রতিটি edge এ পাওয়া প্রতিটি নোডকে union করে দিব।&#x20;

**শুরুতে গ্রাফ এবং গ্রুপগুলোর অবস্থা এইরকম হবেঃ**

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FUV7A7ydsw2TAb2I2SOCq%2Fimage.png?alt=media&amp;token=69ce2c34-111f-4d4b-911b-661920c47713" alt="" width="563"><figcaption></figcaption></figure>

***

**১ম edge:  0 এর লিডার 0 নিজে এবং 1 এর লিডার 1 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।** \
**১ম edge:  0 1 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2Fqjpucw29Q9tadm9P09Ko%2Fimage.png?alt=media&amp;token=ec3aa48a-0a3f-4c77-a0d0-7a87905d28c4" alt="" width="563"><figcaption></figcaption></figure>

0 1 কে union করা পর, 0 এর লিডার  হচ্ছে 0 নিজেই এবং 1 এর লিডার হচ্ছে 0।&#x20;

***

**২য় edge:  0 এর লিডার 0 নিজে এবং 2 এর লিডার 2 লিজেই,  যেহেতু তাদের লিডারগুলো ভিন্ন তাই কোন cycle detect হয় নি।**\
**২য় edge: 0 2 এর union করা পর**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FzbACuOkm6BeJqqw9yeEa%2Fimage.png?alt=media&amp;token=cc690221-3668-4d31-bc13-81316effe056" alt="" width="563"><figcaption></figcaption></figure>

0 2 কে union করা পর, 0 এর লিডার  হচ্ছে 0 নিজেই এবং 2 এর লিডার হচ্ছে 0।&#x20;

***

**৩য় edge:  1 এর লিডার 0 এবং 2 এর লিডার 0,  যেহেতু তাদের লিডারগুলো মিলে গিয়েছে তাই  cycle detect হওয়ার কথা , কিন্তু এই গ্রাফটি একটি directed গ্রাফ আর এই গ্রাফটিতে স্পষ্টভাবে দেখা যাচ্ছে কোন cycle নাই।**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FemtcDn5FhfDxe7nCMxve%2Fimage.png?alt=media&amp;token=2312bdcb-c7c9-45c0-ad4f-4b813421ec7c" alt="" width="563"><figcaption></figcaption></figure>

**DSU দিয়ে আমরা যেইভাবে undirected গ্রাফের cycle detect করছি, সেইভাবে করতে গেলে direct গ্রাফে cycle না থাকা স্বতেও cycle detect হয়ে যাচ্ছে, কারণ DSU শুধ চেক করে কোন একটা নোডের মধ্যে edge আছে কিনা , DSU direct চেক করে নাহ। তাই DSU দিয়ে Directed graph এ cycle detection করা সম্ভব নয়।**&#x20;
