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

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

## BFS দিয়ে Undirected গ্রাফে cycle detection

গ্রাফের ইনপুট \
**4 4**\ <mark style="color:blue;">0 1</mark>\ <mark style="color:blue;">1 2</mark>\ <mark style="color:blue;">2 3</mark>\ <mark style="color:blue;">3 1</mark>

নিচে ইনপুটটি অনুসারে গ্রাফটি আঁকা হল<br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FtRy57MPqHQxAhEJV6XXW%2Fimage.png?alt=media&amp;token=c97dac78-4cab-4fc5-a302-e312f3f037a8" alt="" width="563"><figcaption></figcaption></figure>

***

-> source = 0 ধরে BFS শুরু করছি।  0 নোডকে queue তে পুশ করা হয়েছে BFS চালানোর জন্য।  0 নোডকে\
ভিজিটেড করা হল। \
**তাহলে এখন queue তে ( 0 )  আছে।**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F7oqRX4sNvZGxth6i66go%2Fimage.png?alt=media&amp;token=6fad1477-4626-4064-b8b0-9806b608fa6f" alt="" width="563"><figcaption></figcaption></figure>

লুপের প্রবেশ করা হল এবং Queue থেকে  0 নোডকে বের করা হল ।

0 নোডের সাথে connected কিন্তু ভিজিটেড এবং  Parent\[0] != child কিনা চেক করা হল, যদি এমনটি পাওয়া যেত তাহলে আমরা বলে ফেলতে পারতাম গ্রাফের মধ্যে cycle আছে।&#x20;

&#x20;এরপর 0 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন নোড 1 এবং  3 নোডকে ভিজিটেড করা হল। 1 এবং 3 কে queue তে পুশ করা হল এবং তাদের parent 0 করা হল।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FvzsBuuU0ksSCXIhglbld%2Fimage.png?alt=media&amp;token=aa4d8961-558b-4bbd-b727-02f813854311" alt="" width="443"><figcaption></figcaption></figure>

**তাহলে এখন queue তে ( 3, 1 )  আছে।**&#x20;

***

-> Queue যেহেতুল empty হয় নি, তাই লুপটি আবার চলবে। Queue থেকে  1 নোডকে বের করা হল ।\
**তাহলে এখন queue তে ( 3 )  আছে।**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F4MaLOw1wjlgJ7ioREHM0%2Fimage.png?alt=media&amp;token=dcb0ccc9-bdf8-4e95-b398-f42042e302aa" alt="" width="563"><figcaption></figcaption></figure>

1 সাথে connected  এবং ভিজিটেড নোড 0 আছে  কিন্তু Parent\[1] != 0 (child) এই conditions টি পরিপূর্ণ না হওয়াই আমরা বলতে পারি না যে এই গ্রাফটিতে cycle আছে।&#x20;

এরপর 1 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন নোড 2  কে ভিজিটেড করা হল। 2 নোডকে queue তে পুশ করা হল এবং 2 নোডের parent 1 করা হল। \
&#x20;<br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FR14nf9ZklS09mlqBgn8l%2Fimage.png?alt=media&amp;token=0f8f503a-1edd-48c6-8527-ce67daf5f5ce" alt="" width="436"><figcaption></figcaption></figure>

**তাহলে এখন queue তে ( 2, 3 )  আছে।**&#x20;

***

-> Queue যেহেতু  empty হয় নি, তাই লুপটি আবার চলবে। Queue থেকে  3 নোডকে বের করা হল । \
**তাহলে এখন queue তে ( 2 )  আছে।**&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FjMMWTqqe4bnv0tfpuuMD%2Fimage.png?alt=media&amp;token=0bb0f0d5-251e-4dba-b47b-0ab027ed5bac" alt="" width="563"><figcaption></figcaption></figure>

3 সাথে connected  এবং ভিজিটেড নোড 0 , 2 আছে ,

* &#x20;0 নোড  Parent\[3] != 0 (child) এই conditions টি পরিপূর্ণ না হওয়াই আমরা বলতে পারি না যে এই গ্রাফটিতে cycle আছে।&#x20;
* **কিন্তু 2 নোড  Parent\[3] != 2 (child) এই conditions টি পরিপূর্ণ করাই আমরা বলতে পারি যে এই গ্রাফটিতে cycle আছে।**&#x20;

এরপর 3 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন কোন নোড পাওয়া যায় নি।&#x20;

এইভাবে আমরা BFS দিয়ে undirected গ্রাফে cycle detect করে ফেললাম।

## DFS দিয়ে Undirected গ্রাফে cycle detection

গ্রাফের ইনপুট \
**4 4**\ <mark style="color:blue;">0 1</mark>\ <mark style="color:blue;">1 2</mark>\ <mark style="color:blue;">2 3</mark>\ <mark style="color:blue;">3 1</mark>

নিচে ইনপুটটি অনুসারে গ্রাফটি আঁকা হল

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FPJWKBV7mJB2QAA5fYoS9%2Fimage.png?alt=media&amp;token=164b8dd4-dee7-47d4-bcdf-f512a987210a" alt="" width="563"><figcaption></figcaption></figure>

***

-> source = 0 ধরে DFS শুরু করছি।  0 নোডকে ভিজিটেড করা হল। \
কিন্তু 2 নোড Parent\[3] != 0 (child) এই conditions টি পরিপূর্ণ করাই আমরা বলতে পারি যে এই গ্রাফটিতে cycle আছে।

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FGNMy0fe8aaiYU8VBatz8%2Fimage.png?alt=media&amp;token=b20da636-405d-4a66-b3e3-9483d9593dbb" alt="" width="563"><figcaption></figcaption></figure>

0 নোডের সাথে connected আছে 1 এবং 2 নোড।&#x20;

0 নোডের সাথে connected কিন্তু ভিজিটেড এবং  Parent\[0] != child কিনা চেক করা হল, কিন্তু এমন নোড পাওয়ার যায় নি। যদি এমনটি পাওয়া যেত তাহলে আমরা বলে ফেলতে পারতাম গ্রাফের মধ্যে cycle আছে।&#x20;

0 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন নোড হল 1 এবং 2। এখন 0 নোডকে 1 নোডের parent করা হল এবং DFS function কে recursive করা হল source = 1 ধরে।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FZLVOq6TM7CVHR17CjWHO%2Fimage.png?alt=media&amp;token=d0ee0ab4-5e66-4330-b1f1-fe701d44c4e6" alt="" width="550"><figcaption></figcaption></figure>

***

-> এখন source = 1  হল এবং 1 নোডকে ভিজিটেড করা হল।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F9N4rjeQ1vHHo1L4yVTCF%2Fimage.png?alt=media&amp;token=4b22fba7-f0fd-4aed-a833-89fba4bf0a20" alt="" width="563"><figcaption></figcaption></figure>

1 নোডের সাথে connected আছে 0 এবং 2 নোড।&#x20;

1 সাথে connected  এবং ভিজিটেড নোড 0 আছে  কিন্তু Parent\[1] != 0 (child) এই conditions টি পরিপূর্ণ না হওয়াই আমরা বলতে পারি না যে এই গ্রাফটিতে cycle আছে।&#x20;

1 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন নোড হল  2। এখন 1 নোডকে 2 নোডের parent করা হল এবং DFS function কে recursive করা হল source = 2 ধরে। \ <br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FePNQEVfVaOrKSwlXLhcQ%2Fimage.png?alt=media&amp;token=745f547e-272b-4687-8bf2-5795c89a9fd9" alt="" width="563"><figcaption></figcaption></figure>

***

-> এখন source = 2  হল এবং 2 নোডকে ভিজিটেড করা হল। <br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2Ftbj4hOEz0ndt8be1Z1hK%2Fimage.png?alt=media&amp;token=80acf6c5-f134-4612-85aa-0a798089905c" alt="" width="563"><figcaption></figcaption></figure>

2 নোডের সাথে connected আছে 1 এবং 3 নোড।&#x20;

2 সাথে connected  এবং ভিজিটেড নোড 1 আছে  কিন্তু Parent\[2] != 1 (child) এই conditions টি পরিপূর্ণ না হওয়াই আমরা বলতে পারি না যে এই গ্রাফটিতে cycle আছে।&#x20;

2 নোডের সাথে connected এবং এখনো আনভিজিটেড এমন নোড হল  3। এখন 2 নোডকে 3 নোডের parent করা হল এবং DFS function কে recursive করা হল source = 3 ধরে। <br>

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2F2fxlhcasDheBV03tDBcn%2Fimage.png?alt=media&amp;token=f268d500-751e-45e2-85bb-ba02c240d194" alt="" width="563"><figcaption></figcaption></figure>

***

-> এখন source = 3  হল এবং 3 নোডকে ভিজিটেড করা হল।&#x20;

<figure><img src="https://1548341763-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjliRFwU9cGQFGljHYgOZ%2Fuploads%2FdmIhbJO9xB1BQrJzcd9d%2Fimage.png?alt=media&amp;token=568a21f5-1985-45f5-b084-180a6c99d431" alt="" width="563"><figcaption></figcaption></figure>

3 নোডের সাথে connected আছে 2 এবং 0 নোড।&#x20;

3 সাথে connected  এবং ভিজিটেড নোড 2 এবং 0,

* 2 নোড  Parent\[3] != 2 (child) এই conditions টি পরিপূর্ণ না হওয়াই আমরা বলতে পারি না যে এই গ্রাফটিতে cycle আছে।&#x20;
* **কিন্তু 0 নোড  Parent\[3] != 2 (child) এই conditions টি পরিপূর্ণ করাই আমরা বলতে পারি যে এই গ্রাফটিতে cycle আছে।**&#x20;

এইভাবে আমরা DFS দিয়ে undirected গ্রাফে cycle detect করে ফেললাম।&#x20;
