๋ชฉ๋ก์๋ฃ๊ตฌ์กฐ (5)
๐ป

ํธ๋ฆฌ(Tree) - ํธ๋ฆฌ๋ ๋น์ ํ ๊ตฌ์กฐ์ด๋ค. ๋น์ ํ ๊ตฌ์กฐ๋ ์ ํ๊ตฌ์กฐ(์: ํ(Queue), ์คํ(Stack))๊ณผ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต์ (ํน์ ๋ง)์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค. - ์ปดํจํฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๊ฐ ํธ๋ฆฌ์ ๋ํ์ ์ธ ์๋ผ๊ณ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ๋ฏ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๊ฒ์ด ํธ๋ฆฌ๋ผ ํ ์ ์๋ค. - ํธ๋ฆฌ ์ฉ์ด Root Node : ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ต์์์ ์กด์ฌํ๋ A์ ๊ฐ์ ๋ ธ๋ Node : ํธ๋ฆฌ์ ๊ตฌ์ฑ์์์ ํด๋นํ๋ A,B,C,D,E,F,G,H,I,J์ ๊ฐ์ ์์ Edge : ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ฐ๊ฒฐ์ Terminal Node(Leaf Node) : ๋ฐ์ผ๋ก ๋ ๋ค๋ฅธ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ H,I,J,F,G์ ๊ฐ์ ๋ ธ๋ Sub-Tree : ํฐ ํธ๋ฆฌ(์ ์ฒด)์ ์ํ๋ ์์ ํธ๋ฆฌ Level : ํธ๋ฆฌ์์ ๊ฐ ์ธต๋ณ๋ก..

๋๋น์ฐ์ ํ์(BFS= Breadth First Search) ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ(Queue)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํฉ๋๋ค. 1. ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค 2. ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ด ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ค์ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ , ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค . 3. 2๋ฒ์ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค. ๋๋น ์ฐ์ ํ์์ ํ(Queue)์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ดํ๋ค๋ ์ ์์ ๊ตฌํ์ด ๊ฐ๋จํฉ๋๋ค. ์ค์ ๋ก ๊ตฌํํจ์ ์์ด ํ STL์ ์ฌ์ฉํ๋ฉด ์ข์ผ๋ฉฐ ํ์์ ์ํํจ์ ์์ด์ O(N)์๊ฐ์ด ์์๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ ์ค์ ์ํ ์๊ฐ์ DFS๋ณด๋ค ์ข์ ํธ์ ๋๋ค. #include #include #define INF 999999999 ..

๊น์ด ์ฐ์ ํ์(DFS=Depth First Search) ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฒด ๋ ธ๋๋ฅผ ๋งน๋ชฉ์ ์ผ๋ก ํ์ํ๊ณ ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๊น์ด ์ฐ์ ํ์์ ์คํ(Stack) ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ดํฉ๋๋ค. 1. ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. 2. ์คํ์ ์ต์๋จ ๋ ธ๋์๊ฒ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ ๋๋ค. 3. 2๋ฒ ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค. #include #include #define MAX_SIZE 1001 typeder struct{ int index; struct Node *next; } Node; Node** a; int n, m, c[MAX_SIZE..

๊ทธ๋ํ๋ ์ฌ๋ฌผ์ ์ ์ (Vertex)๊ณผ ๊ฐ์ (Edge)์ผ๋ก ๋ํ๋ด๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค. ๊ทธ๋ํ๋ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค. 1) ์ธ์ ํ๋ ฌ(Adjacency Matrix) : 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋ฐฉ์ 2) ์ธ์ ๋ฆฌ์คํธ(Adjacency List) : ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋ฌด๋ฐฉํฅ ๋น๊ฐ์ค์น ๊ทธ๋ํ์ ์ธ์ ํ๋ ฌ - ๋ชจ๋ ๊ฐ์ ์ด ๋ฐฉํฅ์ฑ์ ๊ฐ์ง์ง ์๋ ๊ทธ๋ํ๋ฅผ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค. - ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ฅผ ๋น๊ฐ์ค์น ๊ทธ๋ํ๋ผ๊ณ ํฉ๋๋ค. - ๋ฌด๋ฐฉํฅ ๋น๊ฐ์ค์น ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์๋ ์ฐ๊ฒฐ๋์ด ์๋ ์ํฉ์ ์ธ์ ํ๋ ฌ๋ก ์ถ๋ ฅํ ์ ์์ต๋๋ค. #include int a[1001][1001]; int n,m; int main(void){ scanf("%d %d", &n, &m); //๊ฐ์ ์ ๊ฐ์ for..
์ฐ์ ์์ ํ๋ '์ฐ์ ์์'๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๋ ํ๋ฅผ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋ ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์จ๋ค๋ ํน์ง์ด ์์ด์ ๋ง์ด ํ์ฉ๋๊ณ ์๋ค. ์ฐ์ ์์ ํ๋ ์ด์์ฒด์ ์ ์์ ์ค์ผ์ค๋ง, ์ ๋ ฌ, ๋คํธ์ํฌ ๊ด๋ฆฌ ๋ฑ์ ๋ค์ํ ๊ธฐ์ ์ ์ ์ฉ๋๊ณ ์๋ค. ์ฐ์ ์์ ํ์ ์๊ฐ๋ณต์ก๋๋ O(NlogN)์ด๋ค. ์ผ๋ฐ์ ์ธ ํํ์ ํ๋ ์ ํ์ ์ธ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ์ฐ์ ์์ ํ๋ ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ๋ก ๋ณด๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ค. (์์ ์ด์งํธ๋ฆฌ์ ํก์ฌ) ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ ์์ ํ๋ ์ต๋ ํ์ ์ด์ฉํด ๊ตฌํํ๋ค. ์ต๋ ํ(Max Heap) ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ๊ฐ์ด ํฐ ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค. ์ ์ฒด ํธ๋ฆฌ์์ ๋ฃจํธ ๋ ธ๋๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ง๋ค. ์ฐ์ ์์ ํ์ ์ฝ์ - ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ ์งํ๋ ํํ๋ก ์์ฐจ์ ์ผ๋ก ์ฝ..