๐ ๋ฌธ์
๐ญ ์๊ฐ์ ํ๋ฆ
๋ฌธ์ ๋ฅผ ํธ๋ ์ ์ฅ์์ ์ ํ์ ๋ณด์ง ์์ ์๊ฐ ์๋๋ฐ
์กฐ๊ฑด: 'directed graph' + can connect itself
∴ Union-Find ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค.
์ด 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ํ์ดํ ์ ์๊ฒ ๋ค.
-
Topological Sort using BFS (Kahn's Algorithm) ํ์ด
-
DFS ๋ณํ ํ์ด
์ฌ๊ธฐ์ 2๋ฒ ๋ฐฉ๋ฒ์ ์ ํํด์ ํ์ดํด๋ณด๊ฒ ๋ค.
DFS ๋ณํ ํ์ด๋ฒ์ ํต์ฌ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ ํ์ ์ธ DFS ์ฝ๋๋ฅผ ์ฐ๋, ๋ถ๋ชจ ๋ ธ๋ Set(์ง๋์จ ๋ถ๋ชจ ๋ ธ๋ ๋ฐฉ๋ฌธ์ฌ๋ถ)์ Keep ํ๋ค!
DFS ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ฉด์ ์ด์ ์คํ์ผ๋ก ๋๋์ ๊ฐ๊ธฐ ์ง์ ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋์ง ์์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด (๋ถ๋ชจ ๋ ธ๋ Set ์ ๋ฐ์ดํธ) ๋ถ๋ชจ ๋ ธ๋ ๋ฐฉ๋ฌธ์ ์ทจ์ํ๋ค.
bool dfsDetectCycle(int V, std::vector<int> *adj) {
visited[V] = true;
ancestorVisited[V] = true;
//..... (์ค๋ต)
// before return to parent node, redo ancestor Visited array
ancestorVisited[V] = false;
}
๐ ํ์ด
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Geeks For Geeks] Reverse a String (0) | 2021.02.18 |
---|---|
[GeeksForGeeks] Prim (0) | 2021.02.08 |
[GeeksForGeeks] Topological Sort using Kahn's Algorithm (0) | 2021.02.04 |
[GeeksForGeeks] Detect cycle using DFS (0) | 2021.02.02 |
[Programmers] ๊ฐ์ฅ ํฐ ์ (0) | 2021.01.11 |