๐ก ๊ทธ๋ํ ๊ด๋ จ ์ฉ์ด์ ๊ฐ๋ ๊ผญ ์ดํดํ๊ณ ๊ธฐ์ตํ๊ธฐ !!
ํ์ค์ธ๊ณ์ ์ฌ๋ฌผ์ด๋ ๊ฐ๋ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ํ์ ๋ชจ๋ธ๋ก ๋จ์ํํ์ฌ ํํํ ๊ฒ
: ์ ์ (Vertex / Node)
: ๊ฐ์ (Edge / Link / Arc) _ ์ ์ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค.
- ๊ทธ๋ํ G = (V, E)
๋ณ๋๋ก ํ์๋ ๊ฒ์ ๋ด๊ฐ ๊ธฐ์ตํ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์ ์ด๋ฆ์ด๋ค.
- ์ ์ (Node)
๋ ธ๋
- ๊ฐ์ (Edge)
์ฃ์ง
- ๋ฌดํฅ ๊ฐ์ (Undirected Edge)
๋ฌด๋ฐฉํฅ ์ฃ์ง
: ๋ฐฉํฅ์ด ์กด์ฌํ์ง ์๋ ์ฃ์ง, ์๋ฐฉํฅ์ด๋ผ๊ณ ํ ์ ์๋ค. - ์ ํฅ ๊ฐ์ (Directed Edge)
๋ฐฉํฅ ์ฃ์ง
: ๋ฐฉํฅ์ด ์กด์ฌํ๋ ์ฃ์ง
- ๋ฌดํฅ ๊ฐ์ (Undirected Edge)
- ์ธ์ (Adjacent)
์ธ์
: (๋ ธ๋ ๊ด์ ) ๋ ๋ ธ๋ A, B ์ฌ์ด์ ์ฃ์ง๊ฐ ์กด์ฌํ๋ค๋ฉด A, B๋ ์ธ์ ํ๋ค. - ๋ถ์ (Incident)
๋ถ์
: (์ฃ์ง ๊ด์ ) ๋ ๋ ธ๋ A, B ์ฌ์ด์ ์ฃ์ง e๊ฐ ์กด์ฌํ๋ค๋ฉด ์ฃ์ง e๋ ๋ ธ๋ A, B์ ๋ถ์ํ๋ค. - ์ฐจ์ (Degree)
์ฐจ์
: ํ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ์ฃ์ง์ ์- (๋ฐฉํฅ ๊ทธ๋ํ) in-degree : ๋ ธ๋์ ๋ค์ด์ค๋ ์ฃ์ง์ ์
- (๋ฐฉํฅ ๊ทธ๋ํ) out-degree : ๋ ธ๋์์ ๋๊ฐ๋ ์ฃ์ง์ ์
- ์๊ธฐ ๊ฐ์ ๊ณผ ๋ค์ค ๊ฐ์
- ์๊ธฐ ๊ฐ์ (Self-loop) : ๋ ธ๋ ํ๋๋ฅผ ๋๊ณ ๋ณผ ๋, ์์ ์ผ๋ก ๋ค์ ๋์์ค๋ ์ฃ์ง
- ๋ค์ค ๊ฐ์ (Multiple / Parallel edges) : ๋ ๊ฐ ์ด์์ ์ฃ์ง๊ฐ ๋๊ฐ์ ๋ ๋ ธ๋์ ๋ถ์ํ ๋
- ๊ฒฝ๋ก (Path)
๊ฒฝ๋ก
: ๋ ธ๋ + ์ฃ์ง๊ฐ ๊ต๋๋ก ๊ตฌ์ฑ๋ sequence- ๋จ์ ๊ฒฝ๋ก (Simple Path) : ๊ฐ์ ๋ ธ๋๋ฅผ ๋ ๋ฒ ์ด์ ๊ฐ์ง ์๋ ๊ฒฝ๋ก, sequence์์ ๋ ธ๋์ ์ฃ์ง๊ฐ ์ค๋ณต๋์ง x
- ํ๋ก (Cycle)
์ธ์ดํด
: A ๋ ธ๋์์ ์ถ๋ฐํ์ ๋ ๋ค์ A ๋ ธ๋๋ก ๋์์ค๋ ๊ฒฝ๋ก- ๋จ์ ํ๋ก (Simple Cycle) : ๊ฐ์ ๋ ธ๋๋ฅผ ๋ ๋ฒ ์ด์ ๊ฐ์ง ์๋ ์ธ์ดํด, sequence์์ ๋ ธ๋์ ์ฃ์ง๊ฐ ์ค๋ณต๋์ง x
- ์ฐ๊ฒฐ๋จ (Connected)
์ฐ๊ฒฐ
: ๋ ธ๋ A์์ ๋ ธ๋ B๋ก์ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ ๋, A์ B๋ ์ฐ๊ฒฐ๋์ด ์๋ค.
๋ณ๋๋ก ํ์๋ ๊ฒ์ ๋ด๊ฐ ๊ธฐ์ตํ๊ธฐ ์ฌ์ธ ๊ฒ ๊ฐ์ ์ด๋ฆ์ด๋ค.
- ๋ฌดํฅ ๊ทธ๋ํ (Undirected Graph)
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
: ๋ฌด๋ฐฉํฅ ์ฃ์ง๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ - ์ ํฅ ๊ทธ๋ํ (Directed Graph)
๋ฐฉํฅ ๊ทธ๋ํ
: ๋ฐฉํฅ ์ฃ์ง๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ - ๊ฐ์ค์น ๊ทธ๋ํ (Weighted Graph) : ๊ฐ์ค์น(๋น์ฉ)๋ฅผ ๊ฐ๋ ์ฃ์ง๋ค๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ํ
- ์ ๊ท ๊ทธ๋ํ (Regular Graph) : ๋ชจ๋ ๋ ธ๋๊ฐ ๋์ผํ ์ฐจ์๋ฅผ ๊ฐ์ง๋ ๊ทธ๋ํ
-
์์ ๊ทธ๋ํ (Complete Graph) : ๋ชจ๋ ๋
ธ๋๊ฐ ์๋ก ์ธ์ ํด์๋ ๊ทธ๋ํ, ์์ ๊ทธ๋ํ๋ ์ ๊ท ๊ทธ๋ํ
- N๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ผ ๋, ์ฃ์ง์ ๊ฐ์ : 1๋ถํฐ N๊น์ง ๋ํ ๊ฐ,
- N๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ ๋ฐฉํฅ ๊ทธ๋ํ์ผ ๋, ์ฃ์ง์ ๊ฐ์ : ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ ๊ฒฝ์ฐ์ x2ํ ๊ฐ,
- N๊ฐ์ ๋
ธ๋๋ฅผ ๊ฐ์ง๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ผ ๋, ์ฃ์ง์ ๊ฐ์ : 1๋ถํฐ N๊น์ง ๋ํ ๊ฐ,
- ์ฐ๊ฒฐ ๊ทธ๋ํ (Connected Graph) : ๋ชจ๋ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ด์, ๋ชจ๋ ๋ ธ๋๋ผ๋ฆฌ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ ๊ทธ๋ํ
- ๋ถ๋ถ ๊ทธ๋ํ : ์ด๋ค ๊ทธ๋ํ์ ๋ถ๋ถ ๋ถ๋ถ
- ํธ๋ฆฌ ๊ทธ๋ํ : ์ธ์ดํด์ ๊ฐ์ง์ง ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ, ๋ชจ๋ ๋ ธ๋์ ๋ํด์ ๊ฒฝ๋ก๊ฐ ์ ํํ 1๊ฐ ์กด์ฌํ๋ค.
๊ฐ์ ๋ฆฌ์คํธ, ์ธ์ ํ๋ ฌ, ์ธ์ ๋ฆฌ์คํธ ์ด๋ ๊ฒ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
๋ ธ๋ ๊ฐ์ : V๊ฐ, ์ฃ์ง ๊ฐ์ : E๊ฐ
- E x 2 (or E x 3) ์ด์ฐจ์ ๋ฐฐ์ด A์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๋ ๋ ธ๋ x, y ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฃ์ง e์ ๋ํด์ A[k][0] = x, A[k][1] = y
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ A[k][2] ์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- V x V ์ด์ฐจ์ ๋ฐฐ์ด A์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๋ฅผ ์ฐ๊ฒฐํ๋ ์ฃ์ง๊ฐ ์กด์ฌํ๋ค๋ฉด(์ธ์ ํ๋ค๋ฉด) A[i][j] = 1, ์กด์ฌํ์ง ์๋๋ค๋ฉด A[i][j] = 0
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ ์ฃ์ง๊ฐ ์กด์ฌํ ๋ 1 ๋์ ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ณต์ก๋๊ฐ
์ด๊ธฐ ๋๋ฌธ์, V์ ๊ฐ์ด ํด ๊ฒฝ์ฐ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค. 100 ์ดํ์ ๊ฐ์ผ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- V ๊ฐ์ Linked List๋ก ๊ทธ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- ๊ฐ์ค์น ๊ทธ๋ํ์ ๊ฒฝ์ฐ (๋
ธ๋ ์ ๋ณด, ๊ฐ์ค์น ์ ๋ณด)๋ฅผ ํจ๊ป ์ ์ฅํ๋ค.
C++๋ก ํผ๋ค๋ฉด pair, Java๋ก ํผ๋ค๋ฉด class๋ฅผ ์ฌ์ฉํ๋ค.
๋ ธ๋ ๊ฐ์ : V๊ฐ, ์ฃ์ง ๊ฐ์ : E๊ฐ
๊ฐ์ ๋ฆฌ์คํธ | ์ธ์ ํ๋ ฌ | ์ธ์ ๋ฆฌ์คํธ | |
---|---|---|---|
๊ณต๊ฐ | E | V + E | |
๋
ธ๋ |
E | V | |
๋
ธ๋ |
E | 1 | min( |
๋ ธ๋ ์ฝ์ | 1 | 1 | |
์ฃ์ง ์ฝ์ | 1 | 1 | 1 |